Download example/reader2.c from AryaWu/libxml: direct link, hf CLI and curl.
- Browser
- Download file 2.99 kB
-
https://huggingface.co/AryaWu/libxml/resolve/main/example/reader2.c
- Command line
-
hf download hf://AryaWu/libxml/example/reader2.c
-
curl -L -o reader2.c https://huggingface.co/AryaWu/libxml/resolve/main/example/reader2.c
2.99 kB
| /** | |
| * section: xmlReader | |
| * synopsis: Parse and validate an XML file with an xmlReader | |
| * purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file | |
| * validating the content in the process and activating options | |
| * like entities substitution, and DTD attributes defaulting. | |
| * (Note that the XMLReader functions require libxml2 version later | |
| * than 2.6.) | |
| * usage: reader2 <valid_xml_filename> | |
| * test: reader2 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res | |
| * author: Daniel Veillard | |
| * copy: see Copyright for the status of this software. | |
| */ | |
| /** | |
| * processNode: | |
| * @reader: the xmlReader | |
| * | |
| * Dump information about the current node | |
| */ | |
| static void | |
| processNode(xmlTextReaderPtr reader) { | |
| const xmlChar *name, *value; | |
| name = xmlTextReaderConstName(reader); | |
| if (name == NULL) | |
| name = BAD_CAST "--"; | |
| value = xmlTextReaderConstValue(reader); | |
| printf("%d %d %s %d %d", | |
| xmlTextReaderDepth(reader), | |
| xmlTextReaderNodeType(reader), | |
| name, | |
| xmlTextReaderIsEmptyElement(reader), | |
| xmlTextReaderHasValue(reader)); | |
| if (value == NULL) | |
| printf("\n"); | |
| else { | |
| if (xmlStrlen(value) > 40) | |
| printf(" %.40s...\n", value); | |
| else | |
| printf(" %s\n", value); | |
| } | |
| } | |
| /** | |
| * streamFile: | |
| * @filename: the file name to parse | |
| * | |
| * Parse, validate and print information about an XML file. | |
| */ | |
| static void | |
| streamFile(const char *filename) { | |
| xmlTextReaderPtr reader; | |
| int ret; | |
| /* | |
| * Pass some special parsing options to activate DTD attribute defaulting, | |
| * entities substitution and DTD validation | |
| */ | |
| reader = xmlReaderForFile(filename, NULL, | |
| XML_PARSE_DTDATTR | /* default DTD attributes */ | |
| XML_PARSE_NOENT | /* substitute entities */ | |
| XML_PARSE_DTDVALID); /* validate with the DTD */ | |
| if (reader != NULL) { | |
| ret = xmlTextReaderRead(reader); | |
| while (ret == 1) { | |
| processNode(reader); | |
| ret = xmlTextReaderRead(reader); | |
| } | |
| /* | |
| * Once the document has been fully parsed check the validation results | |
| */ | |
| if (xmlTextReaderIsValid(reader) != 1) { | |
| fprintf(stderr, "Document %s does not validate\n", filename); | |
| } | |
| xmlFreeTextReader(reader); | |
| if (ret != 0) { | |
| fprintf(stderr, "%s : failed to parse\n", filename); | |
| } | |
| } else { | |
| fprintf(stderr, "Unable to open %s\n", filename); | |
| } | |
| } | |
| int main(int argc, char **argv) { | |
| if (argc != 2) | |
| return(1); | |
| /* | |
| * this initialize the library and check potential ABI mismatches | |
| * between the version it was compiled for and the actual shared | |
| * library used. | |
| */ | |
| LIBXML_TEST_VERSION | |
| streamFile(argv[1]); | |
| return(0); | |
| } | |
| int main(void) { | |
| fprintf(stderr, "XInclude support not compiled in\n"); | |
| return(0); | |
| } | |