#include <libxml/xmlreader.h> #include <stdio.h> #include <string.h> #include <iostream> using namespace std; //编译选项 gcc `xml2-config --cflags --libs` testxml.cpp g++ `xml2-config --cflags --libs` testxml.cpp g++ `xml2-config --cflags --libs` testxml.cpp g++ `xml2-config --cflags --libs` testxml.cpp g++ `xml2-config --cflags --libs` testxml.cpp g++ `xml2-config --cflags --libs` testxml.cpp void printAttribute(xmlTextReaderPtr reader) { if(1 == xmlTextReaderHasAttributes(reader)) { xmlChar *name,*value; int res = xmlTextReaderMoveToFirstAttribute(reader); while(1 == res) { name = (xmlChar*)xmlTextReaderConstName(reader); value = (xmlChar*)xmlTextReaderConstValue(reader); fprintf(stderr, "\tattribute=[%s],value=[%s]\n", name, value); res=xmlTextReaderMoveToNextAttribute(reader); } xmlTextReaderMoveToElement(reader); } } void printNode(xmlTextReaderPtr reader) { const xmlChar *name,*value; name=xmlTextReaderConstName(reader); if (xmlTextReaderNodeType(reader) == XML_READER_TYPE_ELEMENT) { fprintf(stderr, "startMarkup=%s",name); printAttribute(reader); } else if(xmlTextReaderNodeType(reader)==XML_READER_TYPE_END_ELEMENT) { //fprintf(file,"endMarkup=%s",name); } else { fprintf(stderr, "flag=%s", name); } if(xmlTextReaderHasValue(reader)) { value=xmlTextReaderConstValue(reader); fprintf(stderr, "\tvalue=%s", value); } fprintf(stderr, "\n"); } int main(int argc, char** argv) { static char memory[] = "<?xml version = \"1.0\" encoding = \"utf-8\" ?>" "<msg>" "<output area_code = \"100\" output_id = \"1\" />" "</msg>"; xmlTextReaderPtr reader; reader = xmlReaderForMemory(memory, strlen(memory), NULL, "UTF-8", 0); if (reader == NULL) { cout << "xml file format error!!!!" << endl; return -1; } int ret=xmlTextReaderRead(reader); while(ret == 1) { printNode(reader); ret=xmlTextReaderRead(reader); } //element = xmlTextReaderName(reader); return 0; } |
|