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

 更新时间:2025年03月25日 08:28:09   作者:老胖闲聊  
在当今的信息化时代,XML作为一种重要的数据交换格式,广泛应用于各种领域,Python作为一种功能强大的编程语言,也提供了丰富的库来支持对XML文档的操作,本章将介绍Python XML自动化处理全攻略,需要的朋友可以参考下

一、常用 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自动化处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Pandas读取某列某行数据之loc和iloc用法总结

    利用Pandas读取某列某行数据之loc和iloc用法总结

    loc是location的意思,和iloc中i的意思是指integer,所以它只接受整数作为参数,下面这篇文章主要给大家介绍了关于利用Pandas读取某列某行数据之loc和iloc用法的相关资料,需要的朋友可以参考下
    2022-03-03
  • python实现读取大文件并逐行写入另外一个文件

    python实现读取大文件并逐行写入另外一个文件

    下面小编就为大家分享一篇python实现读取大文件并逐行写入另外一个文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python实现PDF和TIFF格式之间的相互转换

    Python实现PDF和TIFF格式之间的相互转换

    PDF是数据文档管理领域常用格式之一,主要用于存储和共享包含文本、图像、表格、链接等的复杂文档,而TIFF常见于图像处理领域, 在实际应用中,我们可能有时需要将PDF文件转换为TIFF图像,本文将介绍如何使用Python实现PDF和TIFF格式之间的相互转换,需要的朋友可以参考下
    2024-07-07
  • python 中的int()函数怎么用

    python 中的int()函数怎么用

    int() 函数用于将一个字符串会数字转换为整型。接下来通过本文给大家介绍python 中的int()函数的相关知识,感兴趣的朋友一起看看吧
    2017-10-10
  • 基于Python实现MUI侧滑菜单a标签跳转

    基于Python实现MUI侧滑菜单a标签跳转

    这篇文章主要介绍了基于Python实现MUI侧滑菜单a标签跳转,mui最接近原生APP体验的高性能前端框架,MUI侧滑常见的场景有下拉刷新,侧滑抽屉,侧滑删除,侧滑返回以及侧滑菜单等等,下面来看看文章内容详细的介绍,需要的朋友可以参考一下
    2021-11-11
  • Pandas在数据分析和机器学习中的应用及优势

    Pandas在数据分析和机器学习中的应用及优势

    Pandas是Python中用于数据处理和数据分析的库,它提供了灵活的数据结构和数据操作工具,包括Series和DataFrame等。Pandas还支持大量数据操作和数据分析功能,包括数据清洗、转换、筛选、聚合、透视表、时间序列分析等
    2023-04-04
  • python实现堆排序的实例讲解

    python实现堆排序的实例讲解

    在本篇文章里小编给大家分享的是一篇关于python实现堆排序的实例讲解内容,需要的朋友们可以学习参考下。
    2020-02-02
  • django进阶之cookie和session的使用示例

    django进阶之cookie和session的使用示例

    这篇文章主要介绍了django进阶之cookie和session的使用示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 深入解读Python如何进行文件读写

    深入解读Python如何进行文件读写

    文件的作用 就是把一些存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力,本文将带你了解通过python如何进行文件的读写操作
    2021-10-10
  • python中迭代器(iterator)用法实例分析

    python中迭代器(iterator)用法实例分析

    这篇文章主要介绍了python中迭代器(iterator)用法,实例分析了Python中迭代器的相关使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04

最新评论