Rom*_*der 51 python xml elementtree
我正在使用Python在Python中生成XML文档ElementTree,但该tostring函数在转换为纯文本时不包含XML声明.
from xml.etree.ElementTree import Element, tostring
document = Element('outer')
node = SubElement(document, 'inner')
node.NewValue = 1
print tostring(document) # Outputs "<outer><inner /></outer>"
Run Code Online (Sandbox Code Playgroud)
我需要我的字符串包含以下XML声明:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
Run Code Online (Sandbox Code Playgroud)
但是,似乎没有任何记录的方法可以做到这一点.
是否有适当的方法来呈现XML声明ElementTree?
wrg*_*grs 88
我很惊讶地发现似乎没有办法ElementTree.tostring().但是,您可以使用ElementTree.ElementTree.write()将XML文档写入假文件:
from io import BytesIO
from xml.etree import ElementTree as ET
document = ET.Element('outer')
node = ET.SubElement(document, 'inner')
et = ET.ElementTree(document)
f = BytesIO()
et.write(f, encoding='utf-8', xml_declaration=True)
print(f.getvalue()) # your XML file, encoded as UTF-8
Run Code Online (Sandbox Code Playgroud)
看到这个问题.即便如此,我认为如果不自己编写前置文件,我也不会得到你的'独立'属性.
glo*_*mph 22
我会使用lxml(参见http://lxml.de/api.html).
然后你可以:
from lxml import etree
document = etree.Element('outer')
node = etree.SubElement(document, 'inner')
print(etree.tostring(document, xml_declaration=True))
Run Code Online (Sandbox Code Playgroud)
smr*_*chi 20
是否有正确的方法在 ElementTree 中呈现 XML 声明?
是的,并且不需要使用.tostring函数。根据ElementTree Documentation,您应该创建一个 ElementTree 对象,创建 Element 和 SubElements,设置树的 root,最后在函数xml_declaration中使用参数.write,以便声明行包含在输出文件中。
你可以这样做:
import xml.etree.ElementTree as ET
tree = ET.ElementTree("tree")
document = ET.Element("outer")
node1 = ET.SubElement(document, "inner")
node1.text = "text"
tree._setroot(document)
tree.write("./output.xml", encoding = "UTF-8", xml_declaration = True)
Run Code Online (Sandbox Code Playgroud)
输出文件是:
<?xml version='1.0' encoding='UTF-8'?>
<outer><inner>text</inner></outer>
Run Code Online (Sandbox Code Playgroud)
Ale*_*ara 14
如果包含encoding='utf8',则会得到一个XML标头:
xml.etree.ElementTree.tostring使用encoding ='utf8'写入XML编码声明
示例Python 2代码:
import xml.etree.ElementTree as ElementTree
tree = ElementTree.ElementTree(
ElementTree.fromstring('<xml><test>123</test></xml>')
)
root = tree.getroot()
print('without:')
print(ElementTree.tostring(root, method='xml'))
print('')
print('with:')
print(ElementTree.tostring(root, encoding='utf8', method='xml'))
Run Code Online (Sandbox Code Playgroud)
输出:
$ python2 example.py
without:
<xml><test>123</test></xml>
with:
<?xml version='1.0' encoding='utf8'?>
<xml><test>123</test></xml>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56581 次 |
| 最近记录: |