Объявление XML standalone=" yes " lxml
у меня есть xml, который я анализирую, внося некоторые изменения и сохраняя в новый файл. У него есть декларация <?xml version="1.0" encoding="utf-8" standalone="yes"?>
что я хотел бы сохранить. Когда я сохраняю свой новый файл, я теряю standalone="yes"
бит. Как я могу держать его внутри?
Вот мой код:
templateXml = """<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<package>
<provider>Some Data</provider>
<studio_display_name>Some Other Data</studio_display_name>
</package>"""
from lxml import etree
tree = etree.fromstring(templateXml)
xmlFileOut = '/Users/User1/Desktop/Python/Done.xml'
with open(xmlFileOut, "w") as f:
f.write(etree.tostring(tree, pretty_print = True, xml_declaration = True, encoding='UTF-8'))
5 ответов
вы можете пройти standalone
аргумент ключевого слова tostring()
:
etree.tostring(tree, pretty_print = True, xml_declaration = True, encoding='UTF-8', standalone="yes")
указать standalone
С помощью дерево.docinfo.автономный.
попробуйте следующее:
from lxml import etree
tree = etree.fromstring(templateXml).getroottree() # NOTE: .getroottree()
xmlFileOut = '/Users/User1/Desktop/Python/Done.xml'
with open(xmlFileOut, "w") as f:
f.write(etree.tostring(tree, pretty_print=True, xml_declaration=True,
encoding=tree.docinfo.encoding,
standalone=tree.docinfo.standalone))
Если вы хотите показать в заголовке XML, вы должны установить его в False
вместо "нет". Вот так:
etree.tostring(tree, pretty_print = True, xml_declaration = True, encoding='UTF-8', standalone=False)
Если нет, standalone будет установлен в " да " по умолчанию.
etree.tostring(tree, pretty_print = True, xml_declaration = True, encoding='UTF-8')
добавит объявление, Если вы используете lxml, однако я заметил, что их объявление использует полу-кавычки вместо полных кавычек.
вы также можете получить точное объявление, которое хотите, просто объединив вывод со статической строкой, которая вам нужна:
xml = etree.tostring(tree, pretty_print = True, encoding='UTF-8')
xml = '<?xml version=\"1.0\" encoding=\"utf-8\"?>\n' + xml
если вы хотите отключить вывод standalone
все пройдет None
вместо True
или False
. Звучит логично, но потребовалось некоторое время, чтобы найти и проверить его.
etree.tostring(tree, xml_declaration = True, encoding='utf-8', standalone=None)
или с помощью context manager и stream etree.xmlfile
сериализация:
with etree.xmlfile(open('/tmp/test.xml'), encoding='utf-8') as xf:
xf.write_declaration(standalone=None)
with xf.element('html'):
with xf.element('body'):
element = etree.Element('p')
element.text = 'This is paragraph'
xf.write(element)