Ildar ha scritto:
> hi all,
>
> I'm new here and might miss the page that describes what I need. Please, send
> me the link to the page this case.
>
>
> I'm playing with the following XML.
>
> <?xml version="1.0" encoding="utf-8"?>
> <root>
> <level1>
> <level2-1>hello</level2-1>
> </level1>
> </root>
>
> I need to get the content of /root/level1/level2-1.
> My code is as follows:
>
> wxXml2Document doc;
> wxString err;
>
> doc.Load(wxT("****.xml"), &err);
>
> if (doc.IsOk())
> {
> wxXml2Node node = doc.GetRoot();
> wxString s = node.Find(wxT("level2-1")).GetName();
> wxString s1 = node.Find(wxT("level2-1")).GetContent();
> wxString s2 = node.Find(wxT("level2-1")).GetFirstChild().GetContent();
> }
>
> the results are:
>
> s == "level2-1" // the same as expected
> s1 == "" // I expected to get "hello"
> s2 == "hello" // ?
yes, sure. no bugs.
This is really a FAQ and I should add it somewhere.
The results you get are because your XML tree is parsed as:
wxXML_ELEMENT_NODE with name "root" and content=""
|- wxXML_ELEMENT_NODE with name "level1" and content=""
|- wxXML_ELEMENT_NODE with name "level2-1" and content=""
|- wxXML_TEXT_NODE with name "" and content="hello"
Thus, if the node is an element node, you shouldn't look at its contents
but rather at its children.
If the node is a text node, the name is empty (or maybe fixed to "text",
I don't remember) and you should just look at his contents.
I've added in CVS the GetNodeContent() function which simplifies the
process (see below).
> The way I'm accessing the value is quite weird and doesn't seem to be safe...
>
> Is there an easier way?
wxXml2Node child = doc.GetRoot();
while (child != wxXml2EmptyNode) {
if (child.GetName() == wxT("level1")) {
// process text enclosed by <level1>
wxString content = child->GetNodeContent();
} else if (child->GetName() == wxT("tag2")) {
// process tag2 ...
}
else
{
// unknown tag?
}
child = child.GetNext();
}
this pattern allows you to scan each node of the XML and e.g. catch
structural errors (e.g. you can check for unknown tags).
Francesco
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
wxCode-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wxcode-users