龙空技术网

Python如何读写xml

勇敢滴哥哥 175

前言:

如今姐妹们对“javaxml读写”都比较注意,小伙伴们都需要剖析一些“javaxml读写”的相关文章。那么小编在网络上收集了一些关于“javaxml读写””的相关资讯,希望兄弟们能喜欢,你们快快来学习一下吧!

首先什么是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。

# 如何解析xmlfrom 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].textprint(author) #John Doe# 通过索引获取太不方便了,怎么通过名字获取 find 或findallauthor = c1.find('author')print(author.text) #John Doe# 这是寻找子集元素,如果找下级所有的呢print(list(root.iter('author')))# 也可以通过xpath寻找,root.iterfind(xpath)
#如何写入xmlfrom xml.etree import ElementTree# 创建元素book = ElementTree.Element("book")title = ElementTree.Element("title")author = ElementTree.Element("author")# 设置属性title.set("name", "Guide")# 设置texttitle.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 转为 ElementTreeet = ElementTree.ElementTree(book)# 写入文件et.write('test.xml', encoding='utf8')

xml.etree.ElementTree是处理XML文件的首选库,因其轻量级和易用性,适合大多数XML读写任务。

标签: #javaxml读写