summaryrefslogtreecommitdiff
path: root/misc/samples
diff options
context:
space:
mode:
Diffstat (limited to 'misc/samples')
-rw-r--r--misc/samples/.gitignore2
-rw-r--r--misc/samples/Makefile10
-rw-r--r--misc/samples/xml_dom.c55
-rw-r--r--misc/samples/xml_full.xml24
-rw-r--r--misc/samples/xml_sax.c109
-rw-r--r--misc/samples/xml_small.xml14
6 files changed, 214 insertions, 0 deletions
diff --git a/misc/samples/.gitignore b/misc/samples/.gitignore
new file mode 100644
index 0000000..805c89c
--- /dev/null
+++ b/misc/samples/.gitignore
@@ -0,0 +1,2 @@
+xml_dom
+xml_sax
diff --git a/misc/samples/Makefile b/misc/samples/Makefile
new file mode 100644
index 0000000..cd411f2
--- /dev/null
+++ b/misc/samples/Makefile
@@ -0,0 +1,10 @@
+XML_TARGETS=xml_dom xml_sax
+XML_CFLAGS=$(shell xml2-config --cflags)
+
+all: $(XML_TARGETS)
+
+%: %.c
+ $(CC) $(XML_CFLAGS) -g -O0 -l xml2 -o $@ $^
+
+clean:
+ rm -r $(XML_TARGETS)
diff --git a/misc/samples/xml_dom.c b/misc/samples/xml_dom.c
new file mode 100644
index 0000000..66166dd
--- /dev/null
+++ b/misc/samples/xml_dom.c
@@ -0,0 +1,55 @@
+#include <stdio.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+static void print_element_names(xmlNode *);
+
+int main(int argc, char **argv) {
+ xmlDocPtr my_doc = NULL;
+ xmlNode *root_element = NULL;
+ char *filename;
+ int rc = 1;
+
+ if (argc != 2) {
+ rc = 1;
+ goto out;
+ }
+ filename = argv[1];
+
+ /* ABI checking (opt.) */
+ LIBXML_TEST_VERSION
+
+ my_doc = xmlReadFile(filename, NULL, 0);
+ if (!my_doc) {
+ rc = 1;
+ goto out_cleanup;
+ }
+
+ /*Get the root element node */
+ root_element = xmlDocGetRootElement(my_doc);
+
+ print_element_names(root_element);
+
+ rc = 0;
+out_freedoc:
+ /* Free parsed DOM tree */
+ xmlFreeDoc(my_doc);
+out_cleanup:
+ /* Cleanup function for the XML library */
+ xmlCleanupParser();
+out:
+ return(rc);
+}
+
+static void print_element_names(xmlNode * a_node)
+{
+ xmlNode *cur_node = NULL;
+
+ for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
+ if (cur_node->type == XML_ELEMENT_NODE) {
+ printf("node type: Element, name: %s\n", cur_node->name);
+ }
+
+ print_element_names(cur_node->children);
+ }
+}
diff --git a/misc/samples/xml_full.xml b/misc/samples/xml_full.xml
new file mode 100644
index 0000000..c8b0ecd
--- /dev/null
+++ b/misc/samples/xml_full.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<store>
+<!-- Sample Bookstore -->
+<book isbn="10000001">
+<title>The Lord Of The Rings</title>
+<author>J.R.R. Tolkien</author>
+</book>
+<book isbn="10000002">
+<title>Maitreyi</title>
+<author>Mircea Eliade</author>
+</book>
+<cd>
+<title>The Wall</title>
+<artist>Pink Floyd</artist>
+<track length="3:40">Another Brick in the Wall</track>
+<track length="5:33">Mother</track>
+</cd>
+<cd>
+<title>Come on Over</title>
+<artist>Shania Twain</artist>
+<track length="4:40">From This Moment On</track>
+<track length="3:33">You're Still The One</track>
+</cd>
+</store>
diff --git a/misc/samples/xml_sax.c b/misc/samples/xml_sax.c
new file mode 100644
index 0000000..b586a21
--- /dev/null
+++ b/misc/samples/xml_sax.c
@@ -0,0 +1,109 @@
+/*
+ * Simple SAX example
+ */
+
+#include <string.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+static int cb_total = 0;
+
+/*
+ * Callback implementations
+ */
+static void
+cb_start_document(void *ctx ATTRIBUTE_UNUSED)
+{
+ cb_total++;
+ fprintf(stdout, "SAX.startDocument()\n");
+}
+
+static void
+cb_end_document(void *ctx ATTRIBUTE_UNUSED)
+{
+ cb_total++;
+ fprintf(stdout, "SAX.endDocument()\n");
+}
+
+static void
+cb_start_element(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
+{
+ int i;
+
+ cb_total++;
+ fprintf(stdout, "SAX.startElement(%s", (char *) name);
+ if (atts != NULL) {
+ for (i = 0;(atts[i] != NULL);i++) {
+ fprintf(stdout, ", %s='", atts[i++]);
+ if (atts[i] != NULL)
+ fprintf(stdout, "%s'", atts[i]);
+ }
+ }
+ fprintf(stdout, ")\n");
+}
+
+static void
+cb_end_element(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
+{
+ cb_total++;
+ fprintf(stdout, "SAX.endElement(%s)\n", (char *) name);
+}
+
+static void
+cb_characters(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
+{
+ char output[40];
+ int i;
+
+ cb_total++;
+ for (i = 0;(i<len) && (i < 30);i++)
+ output[i] = ch[i];
+ output[i] = 0;
+
+ fprintf(stdout, "SAX.characters(%s, %d)\n", output, len);
+}
+
+static void
+cb_comment(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
+{
+ cb_total++;
+ fprintf(stdout, "SAX.comment(%s)\n", value);
+}
+
+/*
+ * Define callback struct
+ */
+xmlSAXHandler debugSAXHandlerStruct = {
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ cb_start_document,
+ cb_end_document,
+ cb_start_element,
+ cb_end_element,
+ NULL,
+ cb_characters,
+ NULL, NULL,
+ cb_comment,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ 1
+};
+xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
+
+int main(int argc, char **argv) {
+ int rc;
+
+ if (argc != 2)
+ return 1;
+
+ cb_total = 0;
+ rc = xmlSAXUserParseFile(debugSAXHandler, NULL, argv[1]);
+ if (rc)
+ fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", rc);
+
+ fprintf(stdout, "\ncallback calls: %d\n", cb_total);
+
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return(0);
+}
diff --git a/misc/samples/xml_small.xml b/misc/samples/xml_small.xml
new file mode 100644
index 0000000..6b38af4
--- /dev/null
+++ b/misc/samples/xml_small.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<store>
+<!-- Sample Bookstore -->
+<book isbn="10000001">
+<title>The Lord Of The Rings</title>
+<author>J.R.R. Tolkien</author>
+</book>
+<cd>
+<title>The Wall</title>
+<artist>Pink Floyd</artist>
+<track length="3:40">Another Brick in the Wall</track>
+<track length="5:33">Mother</track>
+</cd>
+</store>