HelloI am trying to parse data read from the network, so I progressively feed the data into a reader. I'm using a xmlReaderForMemory, when I receive the data I feed it using this function: xmlReaderNewMemory. For pulling the data out I use xmlTextReaderRead.
Is this the correct way to do such a thing ?I'm using this xml sample. I'm feeding one line at a time, using different xmlReaderForMemory calls:
1. "<stream1>" 2. "<streams></streams>" 3. "</stream1>\n"; I use the following code, slightly simplified for exemplification "reader" is a class member initialised in ctor: char dummy = '<'; reader = xmlReaderForMemory(&dummy, sizeof(dummy), NULL, NULL, 0); void Parser::parse( const char* xmlData, unsigned int size ) throw (InvalidXmlException) { // initialize the parserint result = xmlReaderNewMemory(reader, xmlData, size, NULL, NULL, /*XML_PARSE_NOERROR |*/ XML_PARSE_NOWARNING | XML_PARSE_RECOVER);
if (result == -1) TRACEABLE_THROW(InvalidXmlException()); result = xmlTextReaderRead(reader); if (result == -1) TRACEABLE_THROW(InvalidXmlException()); while (result == 1) { //second example xmlChar *name, *value; name = xmlTextReaderName(reader); if (name == NULL) name = xmlStrdup(BAD_CAST "--"); value = xmlTextReaderValue(reader); printf("\n depth:%d type:%d NAME:%s empty:%d", xmlTextReaderDepth(reader), xmlTextReaderNodeType(reader), name, xmlTextReaderIsEmptyElement(reader)); xmlFree(name); if (value == NULL) printf("\n"); else { printf(" %s\n", value); xmlFree(value); } result = xmlTextReaderRead(reader); //second exampleif (result == -1) //second example
TRACEABLE_THROW(InvalidXmlException()); //second example } //second example } After printing the properties of the first tag, <stream1>, I get this error: line 1: parser error : Extra content at the end of the document <stream1> In the second try I removed the lines having the comment //second example . Thus calling just once xmlTextReaderRead.Here, I get the properties of the tags (without the closing tag: </streams> ) until the reader reaches the last element, </stream>
I get this error: Entity: line 1: parser error : StartTag: invalid element name </stream1> ^ Any ideeas ? Thank you very much.
Attachment:
smime.p7s
Description: S/MIME Cryptographic Signature