VirtualBox

source: vbox/trunk/src/libs/libxml2-2.9.2/doc/examples/reader3.c@ 61509

Last change on this file since 61509 was 58072, checked in by vboxsync, 9 years ago

libxml 2.9.2 unmodified

  • Property svn:eol-style set to native
File size: 2.9 KB
Line 
1/**
2 * section: xmlReader
3 * synopsis: Show how to extract subdocuments with xmlReader
4 * purpose: Demonstrate the use of xmlTextReaderPreservePattern()
5 * to parse an XML file with the xmlReader while collecting
6 * only some subparts of the document.
7 * (Note that the XMLReader functions require libxml2 version later
8 * than 2.6.)
9 * usage: reader3
10 * test: reader3 > reader3.tmp && diff reader3.tmp $(srcdir)/reader3.res
11 * author: Daniel Veillard
12 * copy: see Copyright for the status of this software.
13 */
14
15#include <stdio.h>
16#include <libxml/xmlreader.h>
17
18#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_PATTERN_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
19
20
21/**
22 * streamFile:
23 * @filename: the file name to parse
24 *
25 * Parse and print information about an XML file.
26 *
27 * Returns the resulting doc with just the elements preserved.
28 */
29static xmlDocPtr
30extractFile(const char *filename, const xmlChar *pattern) {
31 xmlDocPtr doc;
32 xmlTextReaderPtr reader;
33 int ret;
34
35 /*
36 * build an xmlReader for that file
37 */
38 reader = xmlReaderForFile(filename, NULL, 0);
39 if (reader != NULL) {
40 /*
41 * add the pattern to preserve
42 */
43 if (xmlTextReaderPreservePattern(reader, pattern, NULL) < 0) {
44 fprintf(stderr, "%s : failed add preserve pattern %s\n",
45 filename, (const char *) pattern);
46 }
47 /*
48 * Parse and traverse the tree, collecting the nodes in the process
49 */
50 ret = xmlTextReaderRead(reader);
51 while (ret == 1) {
52 ret = xmlTextReaderRead(reader);
53 }
54 if (ret != 0) {
55 fprintf(stderr, "%s : failed to parse\n", filename);
56 xmlFreeTextReader(reader);
57 return(NULL);
58 }
59 /*
60 * get the resulting nodes
61 */
62 doc = xmlTextReaderCurrentDoc(reader);
63 /*
64 * Free up the reader
65 */
66 xmlFreeTextReader(reader);
67 } else {
68 fprintf(stderr, "Unable to open %s\n", filename);
69 return(NULL);
70 }
71 return(doc);
72}
73
74int main(int argc, char **argv) {
75 const char *filename = "test3.xml";
76 const char *pattern = "preserved";
77 xmlDocPtr doc;
78
79 if (argc == 3) {
80 filename = argv[1];
81 pattern = argv[2];
82 }
83
84 /*
85 * this initialize the library and check potential ABI mismatches
86 * between the version it was compiled for and the actual shared
87 * library used.
88 */
89 LIBXML_TEST_VERSION
90
91 doc = extractFile(filename, (const xmlChar *) pattern);
92 if (doc != NULL) {
93 /*
94 * ouptut the result.
95 */
96 xmlDocDump(stdout, doc);
97 /*
98 * don't forget to free up the doc
99 */
100 xmlFreeDoc(doc);
101 }
102
103
104 /*
105 * Cleanup function for the XML library.
106 */
107 xmlCleanupParser();
108 /*
109 * this is to debug memory for regression tests
110 */
111 xmlMemoryDump();
112 return(0);
113}
114
115#else
116int main(void) {
117 fprintf(stderr, "Reader, Pattern or output support not compiled in\n");
118 exit(1);
119}
120#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette