Python и XML: как разместить два документа в одном документе - PullRequest
7 голосов
/ 06 февраля 2012

Вот мой код:

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 ]

8 голосов
/ 07 февраля 2012

Вот как XML-документы могут быть добавлены к одному основному корневому элементу с помощью minidom.

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.

2 голосов
/ 06 февраля 2012

Был задан вопрос, как добавить один XML-документ к другому, что означает, что я дал следующий ответ:

XML-документ должен иметь один корневой узел , поэтому это невозможно при создании действительного XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...