2022年 11月 3日

python读写xml文件

1.python创建xml

使用xml.etree.ElementTree来操作xml
  • 创建节点:root = ET.Element(‘root’, attribute),

                其中, attribute是属性字典,需要属性时可以添加

  • 创建文档:tree = ET.ElementTree(root)
  • 设置文本值:element.text = ‘default’
  • 设置属性:element.set(‘age’, str(i))
  • 添加节点:root.append(element)
  • 写入文档:tree.write(‘*.xml’, encoding=’utf-8′, xml_declaration=True 

               其中,xml_declaration=True表示对xml声明,<?xml version=’1.0′ encoding=’utf-8′?>

示例:

  1. import xml.etree.ElementTree as ET
  2. from xml.etree.ElementTree import Element
  3. root = ET.Element('Root')
  4. tree = ET.ElementTree(root)
  5. name = Element("name", {'id': 'id2', 'order': 'order2'})
  6. name.text = "xiaoming"
  7. age = Element("age")
  8. age.text = "12"
  9. gender = Element("gender")
  10. gender.text = "男"
  11. root.append(name)
  12. root.append(age)
  13. root.append(gender)
  14. tree.write("1.xml", encoding='utf-8', xml_declaration=True)

结果如下:

但是此时的xml文件和我们平时常见的格式不太一样,如何转变成标准的格式呢? 

思路就是在每个节点之后添加”\n\t”

代码如下:

  1. import xml.etree.ElementTree as ET
  2. from xml.etree.ElementTree import Element
  3. def __indent(elem, level=0):
  4. i = "\n" + level*"\t"
  5. if len(elem):
  6. if not elem.text or not elem.text.strip():
  7. elem.text = i + "\t"
  8. if not elem.tail or not elem.tail.strip():
  9. elem.tail = i
  10. for elem in elem:
  11. __indent(elem, level+1)
  12. if not elem.tail or not elem.tail.strip():
  13. elem.tail = i
  14. else:
  15. if level and (not elem.tail or not elem.tail.strip()):
  16. elem.tail = i
  17. root = ET.Element('Root')
  18. tree = ET.ElementTree(root)
  19. name = Element("name", {'id': 'id2', 'order': 'order2'})
  20. name.text = "xiaoming"
  21. age = Element("age")
  22. age.text = "12"
  23. gender = Element("gender")
  24. gender.text = "男"
  25. root.append(name)
  26. root.append(age)
  27. root.append(gender)
  28. __indent(root)
  29. tree.write("1.xml", encoding='utf-8', xml_declaration=True)

结果如下:

2.python读取/修改xml 

tree = ET.parse(xml_path) 读取xml文档
root = tree.getroot() 获取根节点

示例:读取1.xml的内容,并添加属性,最后写入2.xml

  1. import xml.etree.ElementTree as ET
  2. from xml.etree.ElementTree import Element
  3. tree = ET.parse("1.xml")
  4. root = tree.getroot()
  5. for child in root:
  6. print("tag:", child.tag)
  7. print("tag:", child.text)
  8. print("attrib:", child.attrib)
  9. child.set("set:", "设置属性")
  10. tree.write("2.xml", encoding="utf-8", xml_declaration=True)
  11. """
  12. tag: name
  13. tag: xiaoming
  14. attrib: {'id': 'id2', 'order': 'order2'}
  15. tag: age
  16. tag: 12
  17. attrib: {}
  18. tag: gender
  19. tag: 男
  20. attrib: {}
  21. """

2.xml的内容如下:

 THANKS A LOT!

参考链接:https://blog.csdn.net/hu694028833/article/details/81089959