#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BUFFER_SIZE 128 int main(int argc, char **argv) { FILE *xmlFile; char *filename = NULL; const char *pattern = NULL; xmlPatternPtr patternc = NULL; xmlTextReaderPtr reader; int options = 0; int readlen; char buffer[BUFFER_SIZE]; if (argc != 3) { printf("Usage : %s \n", argv[0]); return -1; } LIBXML_TEST_VERSION; pattern = argv[2]; if (pattern != NULL) { patternc = xmlPatterncompile( (const xmlChar *) pattern, NULL, 1, NULL ); if (patternc == NULL) { xmlGenericError( xmlGenericErrorContext, "Pattern %s failed to compile\n", pattern ); pattern = NULL; printf("Pattern %s failed to compile\n", pattern); return -5; } } filename = argv[1]; if ((xmlFile = fopen(filename , "r")) == NULL) { printf("Not able to open file %s\n", filename); return -2; } options |= XML_PARSE_NOERROR; options |= XML_PARSE_NOWARNING; do { int ret; readlen = fread(buffer, 1, BUFFER_SIZE, xmlFile); reader = xmlReaderForMemory( buffer, readlen, filename, NULL, options ); if (reader == NULL) { printf("Reader is NULL\n"); return -3; } ret = xmlTextReaderRead(reader); //printf("==============\n"); //printf("Buffer is %s\n", buffer); //printf("==============\n"); while (ret == 1) { 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 { printf(" %s\n", value); } if (xmlPatternMatch(patternc, xmlTextReaderCurrentNode(reader)) == 1) { printf("Node matches pattern %s\n", pattern); } ret = xmlTextReaderRead(reader); } xmlFreeTextReader(reader); } while (readlen == BUFFER_SIZE); xmlFreePattern(patternc); xmlCleanupParser(); xmlMemoryDump(); fclose(xmlFile); return 0; }