• 5631阅读
  • 4回复

[提问]XML合并问题 [复制链接]

上一主题 下一主题
离线rqmin
 

只看楼主 倒序阅读 楼主  发表于: 2011-11-01
关键词: xml求助
有2个XML文档,想把第2个合并到第一个中

文档1:
<?xml version="1.0" encoding="UTF-8"?>
<结账单>
    <entry 品名="白酒">
        <数量>2</数量>
        <单价>88.00</单价>
        <金额>176.00</金额>
    </entry>
    <entry 品名="可乐">
        <数量>1</数量>
        <单价>2.00</单价>
        <金额>2.00</金额>
    </entry>
</结账单>


文档2:
<?xml version="1.0" encoding="UTF-8"?>
<结账单>
    <entry 品名="米饭">
        <数量>3</数量>
        <单价>1.00</单价>
        <金额>3.00</金额>
    </entry>
</结账单>


代码:
打开文件,读取xml省略了。
QDomDocument doc1;//文档1
QDomDocument doc2;//文档2
QDomElement docElem1 = doc1.documentElement();
QDomElement docElem2 = doc2.documentElement();

QDomNode n = docElem2.firstChild();  //返回根元素的第一个子节点
while (!n.isNull()) {
            if (n.isElement()) {
                QDomElement e = n.toElement();
                qDebug() << "Element name: " << e.attribute(tr("品名")) << endl;
            //docElem1.appendChild(e);            }

            n = n.nextSibling();
        }

问题

如果代码中红色地方屏蔽,是可以读取所有子节点,否则只能读取第一个,下个兄弟节点读不到,不知道是不是跳出循环了?

求助高手!

离线ninsun

只看该作者 1楼 发表于: 2011-11-02
你需要新建一个Element元素 然后使用node的clone()函数将文档2的元素复制一份到那个新建的Element里面,然后再append

有可能是因为你的这个append导致直接将文档2的元素移动到文档1之中了……所以再找下一个兄弟节点的时候是在文档1之中寻找的……

离线rqmin

只看该作者 2楼 发表于: 2011-11-02
楼上正解,感谢兄弟。

修改后的代码:
        while (!n.isNull()) {
            if (n.isElement()) {
                QDomElement e = n.toElement();
                qDebug() << "Element name: " << e.attribute(tr("品名")) << endl;

                QDomElement temp = n.cloneNode(true).toElement();
            
                docElem2.appendChild(temp);
            }

            n = n.nextSibling();
        }
离线rqmin

只看该作者 3楼 发表于: 2011-11-02
回 2楼(rqmin) 的帖子
docElem2.appendChild(temp);

原来1改为了2,想了想 合并的时候应该并入最新的文档,即第2个xml
离线hello_1s

只看该作者 4楼 发表于: 2014-10-14
楼主,能将你的xml合并代码发出来我看看嘛,我现在也遇到这个问题了。。
快速回复
限100 字节
 
上一个 下一个