Python和XML:如何将两个文档合并为一个文档

7 投票
2 回答
6243 浏览
提问于 2025-04-17 12:23

这是我的代码:

def extract_infos(i):
    blabla...
    blabla calculate v...
    dom = xml.dom.minidom.parseString(v)
    return dom

doc = xml.dom.minidom.Document()
for i in range(1,100):
    dom = extract_infos(i)
    for child in dom.childNodes:
        doc.appendChild(child.cloneNode(True))

最后两行代码只运行一次,然后:

Traceback (most recent call last):
  File "./c.py", line 197, in <module>
    doc.appendChild(child.cloneNode(True))
  File "/usr/lib/python2.6/xml/dom/minidom.py", line 1552, in appendChild
    "two document elements disallowed")
xml.dom.HierarchyRequestErr: two document elements disallowed

所以我想问的是:我该怎么把这两个现有的文档放到一个新文档里(把每个文档的根元素放到一个新的、总的根元素里面)?

2 个回答

1

这个问题是在问怎么把一个XML文档添加到另一个XML文档里。对此,我给出了以下回答:

一个XML文档必须有一个唯一的根节点,所以这样做是无法生成有效的XML的。

8

下面是如何使用minidom将多个XML文档添加到一个主根元素中的方法。

from xml.dom import minidom, getDOMImplementation

XML1 = """
<sub1>
 <foo>BAR1</foo>
</sub1>"""

XML2 = """
<sub2>
 <foo>BAR2</foo>
</sub2>"""

impl = getDOMImplementation()
doc = impl.createDocument(None, "root", None)

for s in [XML1, XML2]:
    elem = minidom.parseString(s).firstChild
    doc.firstChild.appendChild(elem)

print doc.toxml()

=>

<?xml version="1.0" ?><root><sub1>
 <foo>BAR1</foo>
</sub1><sub2>
 <foo>BAR2</foo>
</sub2></root>

因为直接添加Document对象是行不通的,所以我们使用firstChild来获取最顶层的Element元素。

撰写回答