我正在使用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
?
我试图xml.etree.elementtree
用Python写出xml文件.问题在于它们不断生成一行.我希望能够轻松地引用它们,所以如果它可能我真的希望能够干净利落地写出来.
这就是我得到的
<Language><En><Port>Port</Port><UserName>UserName</UserName></En><Ch><Port>IP??</Port><UserName>????</UserName></Ch></Language>
Run Code Online (Sandbox Code Playgroud)
这是我想看到的.
<Language>
<En>
<Port>Port</Port>
<UserName>UserName</UserName>
</En>
<Ch>
<Port>IP??</Port>
<UserName>????</UserName>
</Ch>
</Language>
Run Code Online (Sandbox Code Playgroud) 我目前正在python脚本中使用xml.dom模块的toprettyxml()函数,我对换行有一些麻烦.如果不使用newl参数或者如果我使用toprettyxml(newl ='\n'),它实际上会显示几行而不是一行.
例如
f = open(filename, 'w')
f.write(dom1.toprettyxml(encoding='UTF-8'))
f.close()
Run Code Online (Sandbox Code Playgroud)
显示:
<params>
<param name="Level" value="#LEVEL#"/>
<param name="Code" value="281"/>
</params>
Run Code Online (Sandbox Code Playgroud)
有谁知道问题的来源以及如何使用它?仅供参考我使用的是Python 2.6.1
我使用python生成一个冗长而丑陋的XML字符串,我需要通过漂亮的打印机对其进行过滤以使其看起来更好.
我发现这篇文章适用于python漂亮的打印机,但是我必须将XML字符串写入要回读的文件以使用这些工具,如果可能的话我想避免使用这些工具.
什么python漂亮的工具可以在字符串上工作?
我正在尝试使用pretty_print选项打印出xml doc.但这是一个错误
TypeError:tostring()得到一个意外的关键字参数'pretty_print'
我在这里错过了什么吗?
def CreateXML2():
Date = etree.Element("Date", value=time.strftime(time_format, time.localtime()));
UserNode = etree.SubElement(Date, "User");
IDNode = etree.SubElement(UserNode, "ID");
print(etree.tostring(Date, pretty_print=True));
Run Code Online (Sandbox Code Playgroud) 我有一个现有的 xml 文件,如下所示:
<vehicleTravelTimeMeasurements>
<vehicleTravelTimeMeasurement name="ckkkkkkkkkk" no="2">
<start link="1" pos="3.864983"/>
<end link="3" pos="23.275375"/>
</vehicleTravelTimeMeasurement>
<vehicleTravelTimeMeasurement name="" no="3">
<start link="1" pos="3.864983"/>
<end link="2" pos="13.275375"/>
</vehicleTravelTimeMeasurement>
</vehicleTravelTimeMeasurements>
Run Code Online (Sandbox Code Playgroud)
我尝试使用 xml.etree.cElementTree 构建与上面所示相同的格式,并将它们正确添加到 xml 中:
new = ET.Element("vehicleTravelTimeMeasurement", name = "kkk", no = "4")
newsub1 = ET.Element("start", link = "1", pos="3.88888")
newsub2 = ET.Element("end",link = "3", pos = "3.88888")
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?
先感谢您!
我怎样才能改变我的xml的外观
<root>
<elem1>
<value>
122
</value>
<text>
This_is_just_a_text
</text>
</elem1>
<elem1>
<value>
122
</value>
<text>
This_is_just_a_text
</text>
</elem1>
</root>
Run Code Online (Sandbox Code Playgroud)
看起来像:
<root>
<elem1>
<value>122</value>
<text>This_is_just_a_text</text>
</elem1>
<elem1>
<value>122</value>
<text>This_is_just_a_text</text>
</elem1>
</root>
Run Code Online (Sandbox Code Playgroud)
我只是想知道是什么原因发生的?顺便说一句,下面的方法/函数用于添加缩进!
def prettify(elem):
"""
Return a pretty-printed XML string for the Element.
"""
rough_string = ET.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent="\t")
Run Code Online (Sandbox Code Playgroud) 除了创建一个方法以外,还有其他方法可以使用易于阅读的python编写XML吗?xMLFile.write(xmlDom.toxml())确实创建了正确的xml,但读取它们非常困难.我试过toprettyxml,但似乎并没有做太多.例如,以下是我认为人类可读的xml:
<myroot>
<ent1
att1="val1"
att2="val2"
att3="val3"
/>
<ent2>
<ent3
att1="val1"
att2="val2"
/>
</ent2>
</myroot>
Run Code Online (Sandbox Code Playgroud)
以下响应中的解决方案摘要:
1)如果您只是需要偶尔读取它以进行调试,那么在编写时使用xmllint或xml编辑器来读取它而不是格式化xml.或者
2)使用像Beautiful Soup这样的图书馆.或
3)编写自己的方法
我想创建一个 XML 文件。我试过了,但格式看起来很糟糕,它只显示一行。
就这个:
import xml.etree.cElementTree as ET
root = ET.Element("data")
doc = ET.SubElement(root, "status", date="20210123")
ET.SubElement(doc, "name", name="john").text = "some value1"
ET.SubElement(doc, "class", name="abc").text = "some vlaue2"
tree = ET.ElementTree(root)
tree.write("FILE.xml")
Run Code Online (Sandbox Code Playgroud)
输出是:
<data><status date="20210123"><name name="john">some value1</name><class name="abc">some vlaue2</class></status></data>
Run Code Online (Sandbox Code Playgroud)
但我的期望输出是:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<status>
<name name="john">some value1</name>
<class name="abc">some vlaue2</class>
</status>
</data>
Run Code Online (Sandbox Code Playgroud)
任何人都可以给我一个想法,请。我真的很感激。谢谢