Python 如何使用XML.etree.ElementTree编写XML声明
我正在使用生成Python中的XML文档,但转换为纯文本时,Python 如何使用XML.etree.ElementTree编写XML声明,python,xml,elementtree,Python,Xml,Elementtree,我正在使用生成Python中的XML文档,但转换为纯文本时,tostring函数不包含 来自xml.etree.ElementTree导入元素,tostring 文档=元素(“外部”) 节点=子元素(文档“内部”) node.NewValue=1 打印到字符串(文档)#输出“” 我需要字符串包含以下XML声明: <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 然而,似乎没有任何记录在案的方法来做到这一点 是否有
tostring
函数不包含
来自xml.etree.ElementTree导入元素,tostring
文档=元素(“外部”)
节点=子元素(文档“内部”)
node.NewValue=1
打印到字符串(文档)#输出“”
我需要字符串包含以下XML声明:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
然而,似乎没有任何记录在案的方法来做到这一点
是否有适当的方法在ElementTree
中呈现XML声明?我将使用lxml(请参阅)
然后你可以:
from lxml import etree
document = etree.Element('outer')
node = etree.SubElement(document, 'inner')
print(etree.tostring(document, xml_declaration=True))
我会使用lxml(请参阅)
然后你可以:
from lxml import etree
document = etree.Element('outer')
node = etree.SubElement(document, 'inner')
print(etree.tostring(document, xml_declaration=True))
我惊讶地发现,
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
看。即使这样,我也不认为不自己编写“standalone”属性就可以获得它。我惊讶地发现
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
看。即使这样,我也不认为不自己编写“standalone”属性就可以得到它。我最近遇到了这个问题,在对代码进行了一些挖掘之后,我发现下面的代码片段是functionElementTree.write的定义
def write(self, file, encoding="us-ascii"):
assert self._root is not None
if not hasattr(file, "write"):
file = open(file, "wb")
if not encoding:
encoding = "us-ascii"
elif encoding != "utf-8" and encoding != "us-ascii":
file.write("<?xml version='1.0' encoding='%s'?>\n" %
encoding)
self._write(file, self._root, encoding, {})
def write(self、file、encoding=“us ascii”):
断言self.\u root不是None
如果不是hasattr(文件“写入”):
文件=打开(文件“wb”)
如果没有编码:
encoding=“us ascii”
elif编码!=“utf-8”和编码!=“us ascii”:
文件。写入(“\n”%
编码)
self.\u write(文件,self.\u根,编码,{})
因此,答案是,如果需要将XML头写入文件,请将编码
参数设置为非utf-8
或us ascii
,例如utf-8
我最近在挖掘代码后遇到了这个问题,我发现下面的代码片段是函数ElementTree.write的定义
def write(self, file, encoding="us-ascii"):
assert self._root is not None
if not hasattr(file, "write"):
file = open(file, "wb")
if not encoding:
encoding = "us-ascii"
elif encoding != "utf-8" and encoding != "us-ascii":
file.write("<?xml version='1.0' encoding='%s'?>\n" %
encoding)
self._write(file, self._root, encoding, {})
def write(self、file、encoding=“us ascii”):
断言self.\u root不是None
如果不是hasattr(文件“写入”):
文件=打开(文件“wb”)
如果没有编码:
encoding=“us ascii”
elif编码!=“utf-8”和编码!=“us ascii”:
文件。写入(“\n”%
编码)
self.\u write(文件,self.\u根,编码,{})
因此,答案是,如果需要将XML头写入文件,请将编码
参数设置为非utf-8
或us ascii
,例如utf-8
我将使用:
我将使用:
如果您只想打印,则此选项有效。尝试将其发送到文件时出错
import xml.dom.minidom as minidom
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element, SubElement, Comment, tostring
def prettify(elem):
rough_string = ET.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent=" ")
如果您只想打印,则此选项有效。尝试将其发送到文件时出错
import xml.dom.minidom as minidom
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element, SubElement, Comment, tostring
def prettify(elem):
rough_string = ET.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent=" ")
:
xml.etree.ElementTree.tostring使用encoding='utf8'编写xml编码声明
Python代码示例(适用于Python 2和Python 3):
:
xml.etree.ElementTree.tostring使用encoding='utf8'编写xml编码声明
Python代码示例(适用于Python 2和Python 3):
ElementTree
包用法的最小工作示例:
import xml.etree.ElementTree as ET
document = ET.Element('outer')
node = ET.SubElement(document, 'inner')
node.text = '1'
res = ET.tostring(document, encoding='utf8', method='xml').decode()
print(res)
输出为:
<?xml version='1.0' encoding='utf8'?>
<outer><inner>1</inner></outer>
1.
使用ElementTree
包使用的最小工作示例:
import xml.etree.ElementTree as ET
document = ET.Element('outer')
node = ET.SubElement(document, 'inner')
node.text = '1'
res = ET.tostring(document, encoding='utf8', method='xml').decode()
print(res)
输出为:
<?xml version='1.0' encoding='utf8'?>
<outer><inner>1</inner></outer>
1.
在声明中包括“独立”
我在文档中找不到添加standalone
参数的替代方法,因此我修改了ET.tosting
函数,将其作为参数
from xml.etree import ElementTree as ET
# Sample
document = ET.Element('outer')
node = ET.SubElement(document, 'inner')
et = ET.ElementTree(document)
# Function that you need
def tostring(element, declaration, encoding=None, method=None,):
class dummy:
pass
data = []
data.append(declaration+"\n")
file = dummy()
file.write = data.append
ET.ElementTree(element).write(file, encoding, method=method)
return "".join(data)
# Working example
xdec = """<?xml version="1.0" encoding="UTF-8" standalone="no" ?>"""
xml = tostring(document, encoding='utf-8', declaration=xdec)
从xml.etree导入ElementTree作为ET
#样品
document=ET.Element(‘外部’)
node=ET.SubElement(文档“内部”)
et=et.ElementTree(文档)
#你需要的功能
def-tostring(元素、声明、编码=None、方法=None,):
类虚拟:
通过
数据=[]
data.append(声明+“\n”)
file=dummy()
file.write=data.append
ET.ElementTree(element).write(文件,编码,方法=method)
返回“”连接(数据)
#工作示例
xdec=“”
xml=tostring(文档,编码='utf-8',声明=xdec)
在声明中包括“独立”
我在文档中找不到添加standalone
参数的替代方法,因此我修改了ET.tosting
函数,将其作为参数
from xml.etree import ElementTree as ET
# Sample
document = ET.Element('outer')
node = ET.SubElement(document, 'inner')
et = ET.ElementTree(document)
# Function that you need
def tostring(element, declaration, encoding=None, method=None,):
class dummy:
pass
data = []
data.append(declaration+"\n")
file = dummy()
file.write = data.append
ET.ElementTree(element).write(file, encoding, method=method)
return "".join(data)
# Working example
xdec = """<?xml version="1.0" encoding="UTF-8" standalone="no" ?>"""
xml = tostring(document, encoding='utf-8', declaration=xdec)
从xml.etree导入ElementTree作为ET
#样品
document=ET.Element(‘外部’)
node=ET.SubElement(文档“内部”)
et=et.ElementTree(文档)
#你需要的功能
def-tostring(元素、声明、编码=None、方法=None,):
类虚拟:
通过
数据=[]
data.append(声明+“\n”)
file=dummy()
file.write=data.append
ET.ElementTree(element).write(文件,编码,方法=method)
返回“”连接(数据)
#工作示例
xdec=“”
xml=tostring(文档,编码='utf-8',声明=xdec)
另一个非常简单的选项是将所需的头连接到xml字符串,如下所示:
xml = (bytes('<?xml version="1.0" encoding="UTF-8"?>\n', encoding='utf-8') + ET.tostring(root))
xml = xml.decode('utf-8')
with open('invoice.xml', 'w+') as f:
f.write(xml)
xml=(字节('\n',encoding='utf-8')+ET.tostring(根))
xml=xml.decode('utf-8')
将open('invoice.xml',w+')作为f:
f、 写入(xml)
另一个非常简单的选项是将所需的头连接到xml字符串,如下所示:
xml = (bytes('<?xml version="1.0" encoding="UTF-8"?>\n', encoding='utf-8') + ET.tostring(root))
xml = xml.decode('utf-8')
with open('invoice.xml', 'w+') as f:
f.write(xml)
xml=(字节('\n',encoding='utf-8')+ET.tostring(根))
xml=xml.decode('utf-8')
将open('invoice.xml',w+')作为f:
f、 写入(xml)
简单
Python 2和3的示例(编码参数必须是utf8):
将xml.etree.ElementTree导入为ElementTree
tree=ElementTree.ElementTree(ElementTree.fromstring('123'))