Re: [xml] Root node attributes
- From: Daniel Veillard <veillard redhat com>
- To: Spartaco <spartaco dsplabs net>
- Cc: xml gnome org
- Subject: Re: [xml] Root node attributes
- Date: Mon, 13 Oct 2014 20:39:36 +0800
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
veillard redhat com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | virtualization library http://libvirt.org/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]