当前位置: 代码网 > it编程>前端脚本>Python > Python XML自动化处理全攻略分享

Python XML自动化处理全攻略分享

2025年03月25日 Python 我要评论
一、常用 xml 处理库简介xml.etree.elementtreepython 标准库,轻量级,适合基础操作。lxml第三方高性能库,支持 xpath、xslt 和 schema 验证。xml.d

一、常用 xml 处理库简介

  1. xml.etree.elementtree
    • python 标准库,轻量级,适合基础操作。
  2. lxml
    • 第三方高性能库,支持 xpath、xslt 和 schema 验证。
  3. xml.dom / xml.sax
    • 标准库实现,适合处理大型 xml 或事件驱动解析。
  4. 辅助工具库
    • xmltodict(xml ↔ 字典)、untangle(xml → python 对象)等。

二、xml.etree.elementtree 详解

1. 解析 xml

import xml.etree.elementtree as et

# 从字符串解析
root = et.fromstring("<root><child>text</child></root>")

# 从文件解析
tree = et.parse("file.xml")
root = tree.getroot()

2. 数据查询与修改

# 遍历子元素
for child in root:
    print(child.tag, child.attrib)

# 查找元素
element = root.find("child")  
element.text = "new_text"      # 修改文本
element.set("attr", "value")   # 修改属性

3. 生成与保存 xml

root = et.element("root")
child = et.subelement(root, "child", attrib={"key": "value"})
child.text = "content"

tree = et.elementtree(root)
tree.write("output.xml", encoding="utf-8", xml_declaration=true)

三、lxml 库高级操作

1. xpath 查询

from lxml import etree

tree = etree.parse("file.xml")
elements = tree.xpath("//book[price>20]/title/text()")  # 查询价格>20的书名

2. xml schema 验证

schema = etree.xmlschema(etree.parse("schema.xsd"))
parser = etree.xmlparser(schema=schema)
try:
    etree.parse("data.xml", parser)
except etree.xmlschemaerror as e:
    print("验证失败:", e)

四、xml 与 excel 互转

1. xml → excel (xlsx)

from openpyxl import workbook
import xml.etree.elementtree as et

tree = et.parse("books.xml")
root = tree.getroot()

wb = workbook()
ws = wb.active
ws.append(["书名", "作者", "价格"])

for book in root.findall("book"):
    title = book.find("title").text
    author = book.find("author").text
    price = book.find("price").text
    ws.append([title, author, price])

wb.save("books.xlsx")

2. excel (xlsx) → xml

from openpyxl import load_workbook
import xml.etree.elementtree as et

def xlsx_to_xml(input_file, output_file):
    wb = load_workbook(input_file)
    ws = wb.active
    root = et.element("bookstore")

    headers = [cell.value.strip() for cell in ws[1]]
    for row in ws.iter_rows(min_row=2, values_only=true):
        book = et.subelement(root, "book")
        for idx, value in enumerate(row):
            tag = et.subelement(book, headers[idx])
            tag.text = str(value)

    et.elementtree(root).write(output_file, encoding="utf-8", xml_declaration=true)

xlsx_to_xml("books.xlsx", "books_from_excel.xml")

五、xml 与数据库交互

存储到 sqlite

import sqlite3
import xml.etree.elementtree as et

conn = sqlite3.connect("books.db")
cursor = conn.cursor()
cursor.execute("create table if not exists books (title text, author text, price real)")

tree = et.parse("books.xml")
for book in tree.findall("book"):
    title = book.find("title").text
    author = book.find("author").text
    price = float(book.find("price").text)
    cursor.execute("insert into books values (?, ?, ?)", (title, author, price))

conn.commit()
conn.close()

六、xml 与 json 互转

1. xml → json

import xmltodict
import json

with open("books.xml") as f:
    xml_data = f.read()

data_dict = xmltodict.parse(xml_data)
with open("books.json", "w") as f:
    json.dump(data_dict, f, indent=4, ensure_ascii=false)

2. json → xml

import xmltodict
import json

with open("books.json") as f:
    json_data = json.load(f)

xml_data = xmltodict.unparse(json_data, pretty=true)
with open("books_from_json.xml", "w") as f:
    f.write(xml_data)

七、性能优化与常见问题

1. 性能建议

  • 小型数据: 使用 xml.etree.elementtree
  • 大型数据: 使用 lxml 的 iterparse 流式解析。
  • 内存敏感场景: 使用 xml.sax 事件驱动解析。

2. 常见问题解决

处理命名空间:

# lxml 示例
namespaces = {"ns": "http://example.com/ns"}
elements = root.xpath("//ns:book", namespaces=namespaces)

特殊字符处理:

element.text = et.cdata("<特殊字符>&")

依赖安装

pip install lxml openpyxl xmltodict

输入输出示例

  • xml 文件 (books.xml)
<bookstore>
  <book>
    <title>python编程</title>
    <author>john</author>
    <price>50.0</price>
  </book>
</bookstore>
  • json 文件 (books.json)
{
  "bookstore": {
    "book": {
      "title": "python编程",
      "author": "john",
      "price": "50.0"
    }
  }
}

通过本指南,可快速实现 xml 与其他格式的互转、存储及复杂查询操作,满足数据迁移、接口开发等多样化需求。

到此这篇关于python xml自动化处理全攻略分享的文章就介绍到这了,更多相关python xml自动化处理内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com