Hi Csaba, thanks for the reply! I think however I need to clarify my question a little.
On Thu, Aug 22, 2013 at 10:49 AM, Csaba Raduly <rcs...@gmail.com> wrote: > Hi Simon, > > On Mon, Aug 19, 2013 at 11:54 PM, Simon Kågedal Reimer wrote: >> Hi! >> >> I'm having difficulties using xmlTextReaderReadAttributeValue. It >> doesn't seem to work like the equivalent function in ECMA/.NET, at >> least as implemented by Mono. Consider the following simple C# >> example: >> >> http://pastebin.com/xSbaT7cN >> >> It parses every attribute of every element that has attributes, and >> for each attribute print the texts and entity references contained in >> that attribute's value. In this case, it just prints "foo" and "bar", >> as expected. Now, take a look at the equivalent C code using libxml2: >> >> http://pastebin.com/kCc1twyB >> > > libxml2 doesn't quite work like that. > > Once you called xmlTextReaderRead [optionally check that > xmlTextReaderNodeType() == 1, a.k.a. element ], you should call > xmlTextReaderMoveToFirstAttribute, then > xmlTextReaderMoveToNextAttribute. This would iterate through all the > attributes. > At the end you should call xmlTextReaderMoveToElement(), and then you > can resume calling xmlTextReaderRead() Actually, it works fine to call xmlTextReaderMoveToNextAttribute directly after the xmlTextReaderRead call, and you don't have to call xmlTextReaderMoveToElement before doing the next read. This code works fine for iterating through elements and their attributes: http://pastebin.com/40CaUPG7 It prints the doc element and the two elements elem1 and elem2, with two attributes each. My question, however, concerns the function xmlTextReaderReadAttributeValue, that "parses an attribute value into one or more Text and EntityReference nodes" (from the docs). For example, this code correctly prints both children of an attribute value that has both text content and an entity reference: http://pastebin.com/nNSt4xRm But it fails when an element has more attributes to read. The problem is that, when in "reading attribute value"-mode, the call to xmlTextReaderMoveToNextAttribute does not allow you to move to the next value; it just returns 0. I would expect it to do that, just like xmlTextReaderRead allows you to move ahead relative to the previous read, even if you're on an attribute. Failing that, I would want some kind of function to move one step up back to the attribute, just like xmlTextReaderMoveToElement allows you to move one step up back to the element. But I can't find any such function. A possible workaround would be to instead iterate through the attributes by number, but I would prefer to use "next" as it's more simple and clear. Best regards, Simon Kågedal Reimer [Csaba, sorry for the double post to you, I accidentally did not add xml-list to the reply the first time.] _______________________________________________ xml mailing list, project page http://xmlsoft.org/ xml@gnome.org https://mail.gnome.org/mailman/listinfo/xml