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