Browse Source

Include updated example in README

master
ooxi 12 years ago
parent
commit
23f628ee4f
2 changed files with 102 additions and 2 deletions
  1. +82
    -1
      README.md
  2. +20
    -1
      test/example.c

+ 82
- 1
README.md View File

@@ -10,7 +10,88 @@ into other projects without the need for big external dependencies.
Usage
-----

Usage examples can be found in the [unit cases](https://github.com/ooxi/xml.c/blob/master/test/test-xml.c).
This example is also [included in the repository](https://github.com/ooxi/xml.c/blob/master/test/example.c)
and will be build by default. Most of the code is C boilerplate, the important
functions are `xml_parse_document`, `xml_document_root`, `xml_node_name`,
`xml_node_content` and `xml_node_child` / `xml_node_children`.

```c
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <xml.h>



int main(int argc, 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')
*/
struct xml_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, than 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);
}
struct xml_node* root = xml_document_root(document);


/* Say Hello World :-)
*/
struct xml_node* root_hello = xml_node_child(root, 0);
struct xml_string* hello = xml_node_name(root_hello);
struct xml_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
*/
struct xml_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 the [unit case](https://github.com/ooxi/xml.c/blob/master/test/test-xml.c).


License


+ 20
- 1
test/example.c View File

@@ -45,7 +45,7 @@ int main(int argc, char** argv) {

/* Parse the document
*
* @warning Remember not to free the source until you have freed the
* 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')
@@ -64,6 +64,25 @@ int main(int argc, char** argv) {
struct xml_node* root = xml_document_root(document);


/* Say Hello World :-)
*/
struct xml_node* root_hello = xml_node_child(root, 0);
struct xml_string* hello = xml_node_name(root_hello);
struct xml_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
*/
struct xml_node* root_this = xml_node_child(root, 1);


Loading…
Cancel
Save