将节点添加到QDomNodeList

时间:2012-09-06 09:00:57

标签: qt qt4

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

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

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

我无法将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;

我怎么能这样做?

提前致谢。

1 个答案:

答案 0 :(得分: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;