网站首页 > 技术文章 正文
首先什么是xml?还是先看一下百度百科是怎么说的。
可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展性良好,内容与形式分离,遵循严格的语法要求,保值性良好等优点。
先来看一个简单的xml文档:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<book name="Guide">
<title>XML Developer's Guide</title>
<author>John Doe</author>
<price>44.95</price>
</book>
<!--这是注释的方法-->
<book>
<title>Midnight Rain</title>
<author>Jane Doe</author>
<price>5.95</price>
</book>
</data>
- 头声明<?xml version="1.0" encoding="UTF-8"?> 语法上可有可无,但是建议添加,能更明确的指明编码方式。
- 必须存在一个根标签,有且只能有一个。
- XML 文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。
- 所有 XML 元素都必须有关闭标签,如 <item>...</item>, 或 <item attr="..."/>,标签名大小写敏感。
- XML 必须正确地嵌套,标签不能够交叉编写,例如:<a>内容1<b>内容2</a></b>,这种编写方式是错的。
- XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
- XML 元素可以在开始标签中包含属性,类似 HTML。属性 (Attribute) 提供关于元素的额外(附加)信息。
- 注释方法:<!--这是注释的方法-->,和HTML是一样的。
- 特殊字符要用实体转义,类似HTML,如 < 转义为 < 。
了解xml格式之后,那我们如何读写xml呢?就像其他格式一样,只要你了解这个格式的所有语法和用法,你就可以通过字符串解析和拼接的方式,读取和写入xml文件或字符串,当然这种方式特别不方便,那python有没有为我们提供类库呢?在Python中,处理XML文件主要依赖于几个常用库:
- xml.etree.ElementTree:Python标准库的一部分,轻量级且易于使用,适合大多数XML处理任务。
- minidom:Python标准库中的另一种XML解析器,基于DOM(Document Object Model)模型,适合需要对XML结构进行详细操作的场景。
- lxml:一个第三方库,基于libxml2和libxslt,支持XPath和XSLT,性能较高,适合处理大型或复杂的XML文件。
下面介绍一下如何利用 xml.etree.ElementTree 来读写xml。
# 如何解析xml
from xml.etree import ElementTree
# 解析xml字符串
str = '''<?xml version="1.0" encoding="UTF-8"?>
<data>
<book name="Guide">
<title>XML Developer's Guide</title>
<author>John Doe</author>
<price>44.95</price>
</book>
<!--这是注释的方法-->
<book>
<title>Midnight Rain</title>
<author>Jane Doe</author>
<price>5.95</price>
</book>
</data>
'''
et = ElementTree.fromstring(str)
print(et) #直接拿到根元素: <Element 'data' at 0x0000026038A60368>
# 解析xml文件
et = ElementTree.parse('demo.xml')
print(et) #<xml.etree.ElementTree.ElementTree object at 0x00000260389CC828>
# 获取根元素
root = et.getroot()
print(root) #<Element 'data' at 0x0000019FA97B0368>
# 获得子元素列表,已经废弃了,不建议使用
childList = root.getchildren()
print(childList) #[<Element 'book' at 0x000001D00AAA03B8>, <Element 'book' at 0x000001D00AAA04F8>]
# 一个元素就是一个可迭代对象,官方文档推荐这样直接迭代它
childList = list(root)
print(childList) #[<Element 'book' at 0x00000201108303B8>, <Element 'book' at 0x00000201108304F8>]
# 我们拿到第一个元素
c1 = childList[0] #<Element 'book' at 0x000001C1594703B8>
# 看一下都有什么属性
print(c1.attrib) #{'name': 'Guide'}
# 如果属性很多,想直接获取某一个属性
print(c1.get("name")) #Guide
# 获得作者
author = list(c1)[1].text
print(author) #John Doe
# 通过索引获取太不方便了,怎么通过名字获取 find 或findall
author = c1.find('author')
print(author.text) #John Doe
# 这是寻找子集元素,如果找下级所有的呢
print(list(root.iter('author')))
# 也可以通过xpath寻找,root.iterfind(xpath)
#如何写入xml
from xml.etree import ElementTree
# 创建元素
book = ElementTree.Element("book")
title = ElementTree.Element("title")
author = ElementTree.Element("author")
# 设置属性
title.set("name", "Guide")
# 设置text
title.text = "XML Developer's Guide"
author.text = "John Doe"
# 讲元素连接成树
book.append(title)
book.append(author)
print(ElementTree.dump(book))
#<book><title name="Guide">XML Developer's Guide</title><author>John Doe</author></book>
# 还可以使用SubElement直接创建子元素,更简洁
book = ElementTree.Element("book")
title = ElementTree.SubElement(book, 'title')
title.set("name", "Guide")
print(ElementTree.dump(book))
# <book><title name="Guide" /></book>
# Element 转为 ElementTree
et = ElementTree.ElementTree(book)
# 写入文件
et.write('test.xml', encoding='utf8')
xml.etree.ElementTree是处理XML文件的首选库,因其轻量级和易用性,适合大多数XML读写任务。
- 上一篇: python读取文件的几种方式
- 下一篇: python读取文件
猜你喜欢
- 2025-01-06 3分钟教会你用Python读取MySQL中的数据
- 2025-01-06 Python高效管理JSON文件:读写、更新、删除全攻略
- 2025-01-06 读取txt、doc、docx、pdf文件——python
- 2025-01-06 20 天学 Python 文件操作:Day 2 深入理解文件读取方法
- 2025-01-06 python 利用python读取DOC文件
- 2025-01-06 一日一技:在Python中逐行读取文件
- 2025-01-06 python中读取图片的6种方式
- 2025-01-06 Python读写docx文件
- 2025-01-06 Python 文件操作全指南:从读写到高级操作
- 2025-01-06 python读取文件
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)