On Mon, Oct 13, 2014 at 01:06:57PM +0200, Spartaco wrote:
> Thanks for the suggestion, but I was aware about that problem.
> Adding a comment before the root node apparently doesn't break the code
> at all:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- this is a comment -->
> <Example agent="myclient">
>   <value1>aaa</value1>  
> </Example>
> 
> this one works fine.
> Instead of iterating through nodes and testing for
> xmlTextReaderNodeType(reader) I used the xmlTextReaderCurrentDoc /
> xmlDocGetRootElement sequence because they should work anyway, no matter
> how the XML is structured (and the code is much simpler).
> Am I wrong?

  yes, because the only guarantee that libxml2 reader provides is that
the current node reached by Read() is available in full, nodes before of
after that can have been discarded or not yet read.

> I'd be very pleased if you could give me an XML example that you think
> could really break my code.

  A comment large enough could do that for example, or any other
combination of early PIs and comments, basically your're operating
outside the guaranteed zone, it may work ... or break sometimes.

Daniel
> SM
> 
> On 10/13/2014 11:32 AM, Daniel Veillard wrote:
> > On Sat, Oct 11, 2014 at 02:16:31PM +0200, Spartaco wrote:
> >> Well,
> >> the simpliest solution I've found on my own is like that:
> >>
> >> xml = xmlReaderForFile("example.xml", NULL, 0);
> >> xmlTextReaderRead(xml);
> >> doc = xmlTextReaderCurrentDoc(xml);
> >> root = xmlDocGetRootElement(doc);
> >> agent = xmlGetProp(root, "agent");
> >> ...
> >>
> >> and then proceed with the rest of parsing using the Reader interface, as
> >> usual.
> >> Do not forget to use xmlFreeDoc(doc) at the end of parsing.
> >   Well that's not 100% guaranteed to work, the xmlTextReaderRead()
> > will scan through all nodes. If there is another node (not element)
> > before the root node, like say a comment, you code will break.
> >   do Read() until you reach an element and use the reader
> > to get the attribute.
> >
> > Daniel
> >> On 10/11/2014 12:12 PM, Spartaco wrote:
> >>> Hello guys,
> >>>
> >>> I'm just wondering if is there a simple way in LibXML2 to get an
> >>> attribute value from the root node, preferably using the Reader interface.
> >>> I have no problems at all with attributes from other nodes, they all are 
> >>> accessible by
> >>> xmlTextReaderGetAttribute function, but root.
> >>> Apparently LibXML2 discards root node attributes, or may be I'm missing 
> >>> something.
> >>>
> >>> Just to be clear, I intend to parse something like:
> >>>
> >>> <?xml version="1.0" encoding="UTF-8"?>
> >>> <Example agent="myclient">
> >>>   <value1>aaa</value1>  
> >>> </Example>
> >>>
> >>> and I'd like to get the value of the "agent" attribute.
> >>> Can someone give me an hint?
> >>>
> >>> Regards
> >>> SM
> >>>
> >>> _______________________________________________
> >>> xml mailing list, project page  http://xmlsoft.org/
> >>> xml@gnome.org
> >>> https://mail.gnome.org/mailman/listinfo/xml
> >>>
> >> _______________________________________________
> >> xml mailing list, project page  http://xmlsoft.org/
> >> xml@gnome.org
> >> https://mail.gnome.org/mailman/listinfo/xml
> 
> _______________________________________________
> xml mailing list, project page  http://xmlsoft.org/
> xml@gnome.org
> https://mail.gnome.org/mailman/listinfo/xml

-- 
Daniel Veillard      | Open Source and Standards, Red Hat
veill...@redhat.com  | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | virtualization library  http://libvirt.org/
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to