收到这样的字符串:
<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
也是空的。我在这做错了什么?
提前致谢。
答案 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计数来检查索引是否在范围内。