python3 使用ElementTree 格式化xml
时间: 2024-05-14 12:17:08 浏览: 102
使用ElementTree模块可以方便地解析和操作XML文件。下面是一个简单的例子,展示如何使用ElementTree模块格式化XML文件:
```
import xml.etree.ElementTree as ET
# 加载XML文件
tree = ET.parse('example.xml')
# 获取根节点
root = tree.getroot()
# 格式化XML文件
xml_str = ET.tostring(root, encoding='utf8', method='xml')
pretty_xml = xml.dom.minidom.parseString(xml_str).toprettyxml(indent='\t')
# 将格式化后的XML文件写入文件
with open('example_pretty.xml', 'w') as f:
f.write(pretty_xml)
```
这个例子中,我们首先使用`ET.parse`函数加载XML文件,并使用`getroot`方法获取根节点。然后,使用`ET.tostring`函数将根节点转换为字符串,并使用`minidom`模块的`parseString`函数将其格式化。最后,将格式化后的XML字符串写入文件中。
相关问题
ElementTree 模块能不能将xml文件格式化
`xml.etree.ElementTree` 模块本身并不直接提供格式化 XML 文件的功能,但它允许你创建和修改 XML 结构。如果你想格式化输出 XML,你可以手动构建字符串,然后使用字符串模板(如 `'{indent}'*level + elem.tag + ...`)配合适当的缩进来达到美化的效果。另外,Python 标准库中的 `xml.dom.minidom` 提供了一个名为 `toprettyxml()` 的方法,可以直接生成格式化的 XML 字符串。
例如,你可以这样做:
```python
import xml.etree.ElementTree as ET
# 创建一个 XML 元素树
root = ET.Element('root')
child1 = ET.SubElement(root, 'child1')
child2 = ET.SubElement(root, 'child2')
# 自定义格式化
def indent(elem, level=0):
i = "\n" + level*" "
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = i + " "
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
indent(elem, level+1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i
# 打印格式化后的 XML
formatted_xml = ET.tostring(root, encoding='unicode', method='xml').replace('\n', '')
pretty_xml = indent(ET.fromstring(formatted_xml)) + '\n'
print(pretty_xml)
```
python,ElementTree插入元素后换行
可以使用方法`ElementTree.SubElement()`添加元素,并使用`ElementTree.tostring()`方法将其转换为字符串。如果想要避免在元素间出现换行,可以使用`minidom`模块来格式化XML字符串,代码如下:
```python
import xml.etree.ElementTree as ET
from xml.dom import minidom
# 创建XML文件
root = ET.Element("root")
child1 = ET.Element("child1")
child2 = ET.Element("child2")
root.append(child1)
root.append(child2)
# 添加新元素
new_element = ET.Element("new_element")
child1.append(new_element)
# 转换为字符串
xml_str = ET.tostring(root, encoding="unicode")
# 格式化XML,避免换行
parsed_xml = minidom.parseString(xml_str)
formatted_xml = parsed_xml.toprettyxml()
print(formatted_xml)
```
阅读全文