Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
/xml.cPublic

Simple XML subset parser comparable to glib's Markup parser, but without any dependencies in one self contained file.

License

NotificationsYou must be signed in to change notification settings

ooxi/xml.c

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Similar to theGLib Markup parser,which also just parses an xml subset,xml.c isa simple, small and self contained xml parser in one file. Ideal for embeddinginto other projects without the need for big external dependencies.

Build Status

Downloads

All releases are based on master, so the preferred way of using xml.c is addingthe repository asgit submodule.

If you prefer formal releases, check out therelease tags.

Building xml.c

Since xml.c usesCMake, building the library is fairlyeasy

$ git clone https://github.com/ooxi/xml.c.git xml.c$ mkdir xml.c/build; cd xml.c/build$ cmake -DCMAKE_BUILD_TYPE=Release ..$ make && make test

If you need a debug build, specifyCMAKE_BUILD_TYPE asDebug and rebuild.

Usage

This example is alsoincluded in the repositoryand will be build by default. Most of the code is C boilerplate, the importantfunctions arexml_parse_document,xml_document_root,xml_node_name,xml_node_content andxml_node_child /xml_node_children.

#include<stdbool.h>#include<stdio.h>#include<stdlib.h>#include<xml.h>intmain(intargc,char**argv) {/* XML source, could be read from disk */uint8_t*source="""<Root>""<Hello>World</Hello>""<This>""<Is>:-)</Is>""<An>:-O</An>""<Example>:-D</Example>""</This>""</Root>";/* Parse the document * * Watch out: Remember not to free the source until you have freed the *     document itself. If you have to free the source before, supply a *     copy to xml_parse_document which can be freed together with the *     document (`free_buffer' argument to `xml_document_free') */structxml_document*document=xml_parse_document(source,strlen(source));/* You _have_ to check the result of `xml_parse_document', if it's 0 * then the source could not be parsed. If you think this is a bug in * xml.c, then use a debug build (cmake -DCMAKE_BUILD_TYPE=Debug) which * will verbosely tell you about the parsing process */if (!document) {printf("Could parse document\n");exit(EXIT_FAILURE);}structxml_node*root=xml_document_root(document);/* Say Hello World :-) */structxml_node*root_hello=xml_node_child(root,0);structxml_string*hello=xml_node_name(root_hello);structxml_string*world=xml_node_content(root_hello);/* Watch out: `xml_string_copy' will not 0-terminate your buffers! (but *     `calloc' will :-) */uint8_t*hello_0=calloc(xml_string_length(hello)+1,sizeof(uint8_t));uint8_t*world_0=calloc(xml_string_length(world)+1,sizeof(uint8_t));xml_string_copy(hello,hello_0,xml_string_length(hello));xml_string_copy(world,world_0,xml_string_length(world));printf("%s %s\n",hello_0,world_0);free(hello_0);free(world_0);/* Extract amount of Root/This children */structxml_node*root_this=xml_node_child(root,1);printf("Root/This has %lu children\n", (unsigned long)xml_node_children(root_this));/* Remember to free the document or you'll risk a memory leak */xml_document_free(document, false);}

Another usage example can be found in theunit case.

License

libpng/zlib (BSD)

About

Simple XML subset parser comparable to glib's Markup parser, but without any dependencies in one self contained file.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp