QDomNode类在qt中读取子项的值

时间:2017-02-01 19:26:13

标签: c++ xml qt dom

我想改变" A"在Apple中,键值为1到" D",在此代码中应该替换2个项目。我试过这样的事,但没有任何反应。

 <C>
    <B>  
    <Key value="1">
       <Apple>A</Apple>
    </Key>
    <Key value="2">
       <Apple>A</Apple>
    </Key>
    <Key value="3">
       <Apple>A</Apple>
    </Key>
    <Key value="1">
       <Apple>A</Apple>
    </Key>
    </B>
 </C> 

Qt的:

QDomNodeList roots = doc.elementsByTagName("Key");

for (int i = 0; i < roots.size(); ++i) {
    QDomElement domElement = roots.at(i).toElement();
    QDomAttr attribute = domElement.attributeNode("value");
    if (attribute.value() == "1") { 
        domElement.firstChild().setNodeValue("D");
    }

2 个答案:

答案 0 :(得分:1)

在您的代码中,domElement.firstChild()引用<Apple>元素节点,指向其内容。 <Apple>中的值一个节点(text node),这就是它在DOM层次结构中位于更深层的原因:

  • domElement - <Key>
  • domElement.firstChild() - <Apple>
  • domElement.firstChild().firstChild() - A

因此,您还必须获得<Apple>元素节点的第一个子节点:

domElement.firstChild().firstChild().setNodeValue("D");

答案 1 :(得分:0)

也许:

if (attribute.value() == "1")