2

A 收到这样的字符串:

<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是空的。我在这里做错了什么?

提前致谢。

4

3 回答 3

7

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

QString argument(int index)
{
    QDomNode arg = xml->firstChild().namedItem("arguments");
    return arg.childNodes().at(index).firstChild().nodeValue();
}
于 2010-08-26T09:53:11.357 回答
0

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

于 2010-08-24T21:42:14.740 回答
-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 计数检查索引是否在范围内。

于 2010-08-24T16:18:57.110 回答