如何使用QDomDocument获取子节点的值?

时间:2010-08-24 15:51:41

标签: c++ xml qt dom qtxml

收到这样的字符串:

<invoke name="CanClose" returntype="xml">
   <arguments>
       <string># 998.40</string>
       <number>49920</number>
   </arguments>
</invoke>

我想使用QDomDocument通过索引获取参数'子节点的值(我想在示例中提取字符串“#998.40”和“49920”)。

这就是我的尝试:

QString argument(int index)
{
    QDomNode arg = xml->elementsByTagName("arguments").at(index);
    return arg.nodeValue();
}

但即使arg也是空的。我在这做错了什么?

提前致谢。

3 个答案:

答案 0 :(得分:7)

显然,节点内的文本本身也是一个节点。这是它的工作原理:

QString argument(int index)
{
    QDomNode arg = xml->firstChild().namedItem("arguments");
    return arg.childNodes().at(index).firstChild().nodeValue();
}

答案 1 :(得分:0)

elementsByTagName()返回节点子树中标记名为“arguments”的所有节点(实际上是元素)的列表。 .at()从列表中返回其中一个“arguments”元素,而不是它们的子元素。 如果你想要孩子,你需要迭代他们各自的childNodes()。

答案 2 :(得分:-1)

这个函数返回一个QDomNodList,从中有一个item函数来获取每个节点(并且计数知道有多少节点)

从这里我会说代码可能应该是

http://doc.trolltech.com/3.3/qdomdocument.html#elementsByTagName

http://doc.trolltech.com/3.3/qdomnodelist.html#item

QString argument(int index) 
{ 
    QDomNode arg = xml->elementsByTagName("arguments").item(index); 
    return arg.nodeValue(); 
}

您可能应该使用NodeList计数来检查索引是否在范围内。