我试图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
我将单个元素插入到一个大的 xml 文件中。我希望插入的元素位于顶部(所以我需要使用 root.insert 方法,而不能只是附加到文件中)。我还希望元素的格式与文件的其余部分相匹配。
原始 XML 文件的格式为
<a>
<b>
<c/>
</b>
<d>
<e/>
</d>
....
</a>
Run Code Online (Sandbox Code Playgroud)
然后我运行以下代码:
import xml.etree.ElementTree as ET
xmlfile = ET.parse('file.xml')
a = xmlfile.getroot()
f = ET.Element('f')
g = ET.SubElement(f,'g')
a.insert(1, f)
xmlfile.write('file.xml')
Run Code Online (Sandbox Code Playgroud)
它以以下形式创建输出:
<a>
<b>
<c/>
</b>
<f><g/></f><d>
<e/>
</d>
....
</a>
Run Code Online (Sandbox Code Playgroud)
但我想要它的形式:
<a>
<b>
<c/>
</b>
<f>
<g/>
</f>
<d>
<e/>
</d>
....
</a>
Run Code Online (Sandbox Code Playgroud)
使用 Jonathan Eunice 的解决方案“如何让 Python 的 ElementTree 漂亮地打印到 XML 文件?” 我添加了以下代码来替换 xmlfile.write 命令:
from xml.dom import minidom
xmlstr = minidom.parseString(ET.tostring(a)).toprettyxml(indent=" …Run Code Online (Sandbox Code Playgroud) 我想创建一个 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)
任何人都可以给我一个想法,请。我真的很感激。谢谢