Мне нужно создать файл XML на основе заданной схемы.Эта схема требует от меня использования префикса пространства имен для элементов в сгенерированном XML-файле.
Мне нужно использовать cElementTree
в целях обратной совместимости.В то же время я хочу печатать вывод XML, то есть с отступами.Я знаю, что это можно сделать через xml.dom
.
Вот что я попробовал:
import sys
import cElementTree as ET
from xml.dom import minidom
ET.register_namespace('xs', 'http://www.w3.org/2001/XMLSchema')
root = ET.Element('House')
ET.SubElement(root, 'Room')
etreeString = ET.tostring(root, 'utf-8')
Вывод для приведенного выше кода:
<House><Room /></House>
Как можноЯ правильно получаю элементы с префиксом стандартного пространства имен?Кроме того, как я могу получить файл XML, который содержит объявление XML вверху?
Я попытался создать экземпляр класса xml.etree.ElementTree.ElementTree
, чтобы использовать метод write
, как здесь:
tree = ET.ElementTree(root)
tree.write(sys.stdout)
но, опять же, я не получаю пространства имен:
<House><Room /></House>
Наконец, если я попытаюсь добавить префиксы при создании каждого элемента (что выглядит странно), xml.dom
будетНе разбирайте его, потому что я не знаю, как настроить синтаксический анализ с префиксами пространства имен:
>>> kitchenElem = ET.SubElement(root, 'xs:Kitchen')
>>> tree = ET.ElementTree(root)
>>> tree.write(sys.stdout)
<House><Room /><xs:Kitchen /><xs:Kitchen /></House>
>>> etreeString = ET.tostring(root, 'utf-8')
>>> etreeString
'<House><Room /><xs:Kitchen /><xs:Kitchen /></House>'
>>> minidomParsed = minidom.parseString(etreeString)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ext\vc12_win32\lib\python2.7\site-packages\_xmlplus\dom\minidom.py", line 1925, in parseString
File "ext\vc12_win32\lib\python2.7\site-packages\_xmlplus\dom\expatbuilder.py", line 942, in parseString
File "ext\vc12_win32\lib\python2.7\site-packages\_xmlplus\dom\expatbuilder.py", line 223, in parseString
ExpatError: unbound prefix: line 1, column 15