lxml对于xml文件的操作
from lxml import etreexml = etree.parse("project.xml")
# 写不写好像都没关系 xml = tree.getroot()
for m in xml.iter():print(m)xml = etree.parse("project.xml")
for m in xml.iter():print(m.tag, m.text) # 直接获取元素名和元素的文本
这样是获取所有的元素
当然你也可以直接获取指定元素的所有元素
print(elem.tag, elem.text)
使用m.get('drawingText')获取属性值
如何将 XML 转换为 JSON
import xmltodict
import json# Load XML file
with open('data.xml') as xml_file:xml_data = xml_file.read()# Convert XML to Python dictionary
dict_data = xmltodict.parse(xml_data)# Convert dictionary to JSON
json_data = json.dumps(dict_data)# Output JSON data
print(json_data)
增加新的元素 示例
from lxml import etreetree = etree.parse("project.xml")
root = tree.getroot()
new_element = etree.SubElement(root,"element",elementType="text",descName="",drawingText="Aqqqqqqqqqqq",elementID="1186609598",drawingXML="null",customHandMD5="",colourEffect="0",targetTime="1000",pauseTime="500",drawStyle="draw_style_normal",rotation="0",currentPosX="2846.725",currentPosY="1.5",scalesX="3.7",scalesY="3.7",brush="0",theScale="1",movinCompass="4",movinFlow="0",movinArc="1",movinAllowRotate="yes",offsetX="2846.725",offsetY="1.5",drawDetail="no",sketchStyle="no",brushOptions="0",opacity="1",textColour="0",textAlign="left",textBackwards="no",textSpacing="0",flipHoriz="no",flipVert="no",fontName="Basic",calligraphy_angle="45",targetHeight="1000",transitionTime="1000",keepRunning="no",loopOptions="Fit to Time",blendMode="normal",filters="<filters/>",morphFromID="0",morphCamera="no",morphRemoveOld="yes"
)
tree.write('project.xml',pretty_print=True,xml_declaration=True,encoding='utf-8'
)
修改属性值
from lxml import etreetree = etree.parse("project.xml")
root = tree.getroot()# 找到指定 element(举例:elementID="1186609560")
elem = root.xpath('//element[@elementID="1186609560"]')[0]# 直接改属性
elem.set('drawingText', '新文本')
elem.set('opacity', '0.5')# 保存
tree.write('project.xml', pretty_print=True, xml_declaration=True, encoding='utf-8')
修改内容
item = root.find('.//item')
item.text = '新内容'
tree.write('project.xml', ...)
创建一个
from lxml import etree# 1. 根节点
root = etree.Element("project", version="1.0")# 2. 挂一个 <element> 节点
etree.SubElement(root,"element",elementType="text",descName="",drawingText="Hello 新建",elementID="1234567890",drawingXML="null",opacity="1",textColour="0",fontName="Basic"
)# 3. 写入文件
etree.ElementTree(root).write("project.xml",pretty_print=True,xml_declaration=True,encoding="utf-8"
)
from lxml import etreeroot = etree.Element("Person", id="123") # 属性直接写关键字
etree.SubElement(root, "Name").text = "Jane"
etree.SubElement(root, "Age").text = "25"etree.ElementTree(root).write("person.xml",pretty_print=True, # 👈 自动缩进换行xml_declaration=True,# xml_declaration=True 的作用:让文件第一行自动加上 XML 声明(俗称“文件头”)。encoding="utf-8"
)