188155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard/** 288155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * section: Parsing 388155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * synopsis: Parse an XML document in memory to a tree and free it 488155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * purpose: Demonstrate the use of xmlReadMemory() to read an XML file 588155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * into a tree and and xmlFreeDoc() to free the resulting tree 688155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * usage: parse3 788155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * test: parse3 888155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * author: Daniel Veillard 988155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * copy: see Copyright for the status of this software. 1088155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard */ 1188155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard 1288155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard#include <stdio.h> 1388155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard#include <libxml/parser.h> 1488155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard#include <libxml/tree.h> 1588155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard 1688155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillardstatic const char *document = "<doc/>"; 1788155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard 1888155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard/** 1988155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * example3Func: 2088155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * @content: the content of the document 2188155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * @length: the length in bytes 2288155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * 2388155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * Parse the in memory document and free the resulting tree 2488155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard */ 2588155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillardstatic void 2688155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillardexample3Func(const char *content, int length) { 2788155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard xmlDocPtr doc; /* the resulting document tree */ 2888155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard 2988155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard /* 3088155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * The document being in memory, it have no base per RFC 2396, 3188155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * and the "noname.xml" argument will serve as its base. 3288155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard */ 3388155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard doc = xmlReadMemory(content, length, "noname.xml", NULL, 0); 3488155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard if (doc == NULL) { 3588155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard fprintf(stderr, "Failed to parse document\n"); 3688155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard return; 3788155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard } 3888155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard xmlFreeDoc(doc); 3988155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard} 4088155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard 4188155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillardint main(void) { 4288155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard /* 4388155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * this initialize the library and check potential ABI mismatches 4488155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * between the version it was compiled for and the actual shared 4588155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * library used. 4688155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard */ 4788155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard LIBXML_TEST_VERSION 4888155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard 4988155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard example3Func(document, 6); 5088155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard 5188155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard /* 5288155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * Cleanup function for the XML library. 5388155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard */ 5488155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard xmlCleanupParser(); 5588155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard /* 5688155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard * this is to debug memory for regression tests 5788155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard */ 5888155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard xmlMemoryDump(); 5988155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard return(0); 6088155d85e5474f25214bf7d23f38180b649c7ae6Daniel Veillard} 61