3

我有一个空 QDomNodeList (list1) 和另一个 (list2),其中包含节点 A 的直接子节点,如上面 XM1 中所述。

<A>
    <P></P>
    <P></P>
    <Q>
       <P></P>
    </Q>
</A>

现在我只想将那些名为 Q 的节点从 list2 复制到 listq。

我无法将节点从 list2 复制到 list1。

QDomNodeList list1,list2;
list2 = a.childNodes(); // copying child nodes of a tag in list 2 

for(int i = 0 ; i < list2.count() ; i++)
{
    if(list2.at(i).nodeName() == "Q")
    {
        cout<<"i : "<<i<<endl;
        // Appending is giving error "Calling appendChild() on a null node does nothing"
        list1.at(i).appendChild(list2.at(i));
    }
}
cout<<"No of Q : "<<list1.count()<<endl;

我该怎么做?

提前致谢。

4

1 回答 1

1

list1.at(i)将返回一个默认构造的节点,因为您的列表为空,因此它将是一个空节点。这就是错误的来源。

您需要创建临时QDomDocument来存储所需的节点。

QDomDocument temporary("tempDoc");
QDomNodeList list1,list2;
list2 = a.childNodes();
// copying child nodes of a tag in list 2 
for(int i = 0 ; i < list2.count() ; i++)
{
    if(list2.at(i).nodeName() == "Q")
    {
        cout<<"i : "<<i<<endl;
        temporary.appendChild(temporary.importNode(list2.at(i), true));
    }
}
list1 = temporary.childNodes();
cout<<"No of Q : "<<list1.count()<<endl;
于 2012-09-06T10:38:46.710 回答