Qt XML重复标记

  • 本文关键字:XML Qt c++ qt qt5
  • 更新时间 :
  • 英文 :


我有一个xml文件,只想复制一些特定的节点:

发件人(示例(:

<1>
<2>
</2>
</1>

至:

<1>
<2>
</2>
<2>
</2>
</1>

我尝试了以下方法:

for(int i = 0; i < xmlRoot.childNodes().count(); i++)    {
if(xmlRoot.childNodes().at(i).isElement()){
if(xmlRoot.childNodes().at(i).toElement().attribute("id") == "teamSection"){ //find goal element
teamNode = xmlRoot.childNodes().at(i).cloneNode(); //copy element
if(xmlRoot.childNodes().at(i).insertAfter(teamNode, xmlRoot.childNodes().at(i)).isNull()){
qDebug() << "not worked";
}
else{
qDebug() << "worked";
}
break;
}
}
}

但我想我误解了refChiled,因为我的解决方案只是返回null。(https://doc.qt.io/qt-5/qdomnode.html-insertAfter(。如何复制一个简单节点?

问题出在这行:

xmlRoot.childNodes().at(i).insertAfter(teamNode, xmlRoot.childNodes().at(i))  

insertAfter方法采用两个参数——新节点和将作为新节点插入引用的节点。但是,这两个参数都需要是调用insertAfter的公共父级的子级。从模式上讲,您的代码类似于child->insertAfter(newChild, child),而它应该是parent->insertAfter(newChild, child)。你可以看看下面的代码:

for (int i = 0; i < xmlRoot.childNodes().count(); i++)
{
if (xmlRoot.childNodes().at(i).isElement())
{
if(xmlRoot.childNodes().at(i).toElement().attribute("id") == "teamSection")
{
auto teamNode = xmlRoot.childNodes().at(i).cloneNode(); //copy element
auto sibling = xmlRoot.childNodes().at(i);
if (xmlRoot.insertAfter(teamNode, sibling).isNull())
{
qDebug() << "not worked";
}
else
{
qDebug() << "worked";
}
break;
}
}
}

相关内容

  • 没有找到相关文章

最新更新