返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何操作XML文件
  • 105
分享到

Python如何操作XML文件

2023-06-30 12:06:42 105人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python如何操作XML文件”,在日常操作中,相信很多人在Python如何操作XML文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何操作XML文件”的疑惑有所帮助!接下来

这篇文章主要介绍“python如何操作XML文件”,在日常操作中,相信很多人在Python如何操作XML文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何操作XML文件”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Python如何操作XML文件

一、XML基础概述

1、XML是什么?

XML(Extensible Markup Language):即可扩展标记语言,xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和的限制,可以说它是一个拥 有互联网最高级别通行证的数据携带者。xml是当前处理结构化文档信息中相当给力的技术,xml有 助于在服务器之间穿梭结构化数据,这使得开发人员更加得心应手的控制数据的存储和传输。

Xml用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是-种允许用户对自己的标记语言进行定义的源语 言。Xml是标准通用标记语言(SGML) 的子集,非常适合WEB传输。XML提供统-的方法来描述和交换独立于应用程序或供应商的结构化数据。

2、XML的特点及作用

特点

  • xm|与编程语言的开发平台都无关

  • 实现不同系统之间的数据交互。

作用

  • 配置应用程序和网站;

  • 数据交互;

  • ajax基石。

3、XML文件格式

  • 声明

  • 根元素

  • 子元素

  • 属性

  • 命名空间

  • 限定名

html类似,XML是另一种将数据存储在标记之间的标记语言。它是人类可读和可扩展的;也就是说,我们可以自由地定义自己的标记。XML中的属性、元素和标记与HTML中的类似。XML文件可以有声明,也可以没有声明。但是,如果它有一个声明,那么它必须是XML文件的第一行。如:

<?xml version="1.0” encoding=' "UTF-8" standalone=" no”?>

这个声明语句有三部分:版本、编码和独立性。版本说明正在使用的XML标准的版本; Encoding 表示在此文件中使用的字符编码类型; Standalone 告诉解析器是否要外部信息来解释XML文件的内容。

XML文件可以表示为称为: XML 树。这个XML树从根元素(父元素)开始。这个根元素进一步分支到子元素。 XML文件的每个元素都是XML树中的一个节点。那些没有子节点的元素是叶节点。下图清楚地区分了原始XML文件和XML文件的树表示:
Python如何操作XML文件
Python如何操作XML文件
Python如何操作XML文件

二、Python解析XML文件

新建一个1.xml文件:

<collection shelf="New Arrivals"><class className="1班">   <code>2022001</code>   <number>10</number>   <teacher>小白</teacher></class><class className="2班">   <code>2022002</code>   <number>20</number>   <teacher>小红</teacher></class><class className="3班">   <code>2022003</code>   <number>30</number>   <teacher>小黑</teacher></class></collection>

1、ElementTree 方式

ElementTree模块提供了一个轻量级、Pythonic的api,同时还有一个高效的C语言实现,即xml.etree.cElementTree。与DOM相比,ET的速度更快,API使用更直接、方便。与SAX相比,ET.iterparse函数同样提供了按需解析的功能,不会一次性在内存中读入整个文档。ET的性能与SAX模块大致相仿,但是它的API更加高层次,用户使用起来更加便捷。

Element对象方法:

类方法说明
Element.iter(tag=None)遍历该Element所有后代,也可以指定tag进行遍历寻找。
Element.iterfind(path, namespaces=None)根据tag或path查找所有的后代。
Element.itertext()遍历所有后代并返回text值。
Element.findall(path)查找当前元素下tag或path能够匹配的直系节点
Element.findtext(path, default=None, namespaces=None)寻找第一个匹配子元素,返回其text值。匹配对象可以为tag或path。
Element.find(path)查找当前元素下tag或path能够匹配的首个直系节点。
Element.text获取当前元素的text值。
Element.get(key, default=None)获取元素指定key对应的属性值,如果没有该属性,则返回default值。
Element.keys()返回元素属性名称列表
Element.items()返回(name,value)列表
Element.getchildren()
Element.getiterator(tag=None)
Element.getiterator(self, tag=None)

属性方法

方法名说明
Element.tag节点名(tag)(str)
Element.attrib属性(attributes)(dict)
Element.text文本(text)(str)
Element.tail附加文本(tail) (str)
Element[:]子节点列表(list)

1)接下来,我们加载这个文档,并进行解析:

>>> import xml.etree.ElementTree as ET>>> tree = ET.ElementTree(file='1.xml')

2) 然后,我们获取根元素(root element):

>>> tree.getroot()<Element 'collection' at 0x000001FCC9BBFA90>

3)根元素(root)是一个Element对象。我们看看根元素都有哪些属性:

>>> root = tree.getroot()>>> root.tag, root.attrib('collection', {'shelf': 'New Arrivals'})

4)根元素也具备遍历其直接子元素的接口:

>>> for child_of_root in root:...     print(child_of_root.tag, child_of_root.attrib)...class {'className': '1班'}class {'className': '2班'}class {'className': '3班'}

5)通过索引值来访问特定的子元素:

>>> root[0].tag, root[0].text('class', '\n\t   ')

6) 查找需要的元素

从上面的示例中,可以明显发现我们能够通过简单的递归方法(对每一个元素,递归式访问其所有子元素)获取树中的所有元素。但是,由于这是十分常见的工作,ET提供了一些简便的实现方法。

Element对象有一个iter方法,可以对某个元素对象之下所有的子元素进行深度优先遍历(DFS)。ElementTree对象同样也有这个方法。下面是查找XML文档中所有元素的最简单方法:

>>> for elem in tree.iter():...     print(elem.tag, elem.attrib)...collection {'shelf': 'New Arrivals'}class {'className': '1班'}code {}number {}teacher {}class {'className': '2班'}code {}number {}teacher {}class {'className': '3班'}code {}number {}teacher {}

7)对树进行任意遍历——遍历所有元素,iter方法可以接受tag名称,然后遍历所有具备所提供tag的元素:

>>> for elem in tree.iter(tag='teacher'):...     print(elem.tag, elem.text)...teacher 小白teacher 小红teacher 小黑

8)支持通过XPath查找元素

>>> for elem in tree.iterfind('class/teacher'):...     print(elem.tag, elem.text)...teacher 小白teacher 小红teacher 小黑

9)查找所有具备某个name属性的className元素:

>>> for elem in tree.iterfind('class[@className="1班"]'):...     print(elem.tag, elem.attrib)...class {'className': '1班'}

10)完整解析代码

import xml.etree.ElementTree as ETtree = ET.ElementTree(file='1.xml')print(type(tree))root = tree.getroot()  # root是根元素print(type(root))print(root.tag)for index, child in enumerate(root):    print("第%s个%s元素,属性:%s" % (index, child.tag, child.attrib))    for i, child_child in enumerate(child):        print("标签:%s,内容:%s" % (child_child.tag, child_child.text))

输出结果:

<class 'xml.etree.ElementTree.ElementTree'><class 'xml.etree.ElementTree.Element'>collection第0个class元素,属性:{'className': '1班'}标签:code,内容:2022001标签:number,内容:10标签:teacher,内容:小白第1个class元素,属性:{'className': '2班'}标签:code,内容:2022002标签:number,内容:20标签:teacher,内容:小红第2个class元素,属性:{'className': '3班'}标签:code,内容:2022003标签:number,内容:30标签:teacher,内容:小黑

2、DOM 方式

DOM (Document Object Model)将XML文档作为一棵树状结构进行分析,获取节点的内容以及相关属性,或是新增、删除和修改节点的内容。XML解析器在加载XML文件以后,DQM模式将XML文件的元素视为一个树状结构的节点,一次性读入内存。

解析代码:

from xml.dom.minidom import parse# 读取文件dom = parse('1.xml')# 获取文档元素对象elem = dom.documentElement# 获取 classclass_list_obj = elem.getElementsByTagName('class')print(class_list_obj)print(type(class_list_obj))for class_element in class_list_obj:    # 获取标签中内容    code = class_element.getElementsByTagName('code')[0].childnodes[0].nodeValue    number = class_element.getElementsByTagName('number')[0].childNodes[0].nodeValue    teacher = class_element.getElementsByTagName('teacher')[0].childNodes[0].nodeValue    print('code:', code, ', number:', number, ', teacher:', teacher)

输出结果:

[<DOM Element: class at 0x20141bc5c10>, <DOM Element: class at 0x20141bdf940>, <DOM Element: class at 0x20141bdfb80>]<class 'xml.dom.minicompat.NodeList'>code: 2022001 , number: 10 , teacher: 小白code: 2022002 , number: 20 , teacher: 小红code: 2022003 , number: 30 , teacher: 小黑

三、Python写入XML文件

doc.writexml():生成xml文档,将创建的存在于内存中的xml文档写入本地硬盘中,这时才能看到新建的xml文档

语法格式writexml(file,indent=’’,addindent=’’,newl=’’,endocing=None)

参数说明

  • file:要保存为的文件对象名

  • indent:根节点的缩进方式

  • allindent:子节点的缩进方式

  • newl:针对新行,指明换行方式

  • encoding:保存文件的编码方式

案例代码:

import xml.dom.minidom# 1、在内存中创建一个空的文档doc = xml.dom.minidom.Document()# 2、创建根元素root = doc.createElement('collection ')# print('添加的xml标签为:',root.tagName)# 3、设置根元素的属性root.setAttribute('type', 'New Arrivals')# 4、将根节点添加到文档对象中doc.appendChild(root)# 5、创建子元素book = doc.createElement('book')# 6、添加注释book.appendChild(doc.createComment('这是一条注释'))# 7、设置子元素的属性book.setAttribute('语言', 'java')# 8、子元素中嵌套子元素,并添加文本节点name = doc.createElement('name')name.appendChild(doc.createTextNode('Java基础'))price = doc.createElement('价格')price.appendChild(doc.createTextNode('99元'))number = doc.createElement('number')number.appendChild(doc.createTextNode('剩余100本'))# 9、将子元素添加到boot节点中book.appendChild(name)book.appendChild(price)book.appendChild(number)# 10、将book节点添加到root根元素中root.appendChild(book)# 创建子元素book = doc.createElement('book')# 设置子元素的属性book.setAttribute('语言', 'python')# 子元素中嵌套子元素,并添加文本节点name = doc.createElement('name')name.appendChild(doc.createTextNode('Python基础'))price = doc.createElement('价格')price.appendChild(doc.createTextNode('50元'))number = doc.createElement('number')number.appendChild(doc.createTextNode('剩余20本'))#  将子元素添加到boot节点中book.appendChild(name)book.appendChild(price)book.appendChild(number)# 将book节点添加到root根元素中root.appendChild(book)print(root.toxml())fp = open('./书籍.xml', 'w', encoding='utf-8')  # 需要指定utf-8的文件编码格式,不然notepad中显示十六进制doc.writexml(fp, indent='', addindent='\t', newl='\n', encoding='utf-8')fp.close()

生成书籍.xml文件:

Python如何操作XML文件

四、Python更新XML文件

向xml中插入新的子元素

案例代码:

import xml.dom.minidomfrom xml.dom.minidom import parse# 对book.xml新增一个子元素english,并删除math元素xml_file = './书籍.xml'# 拿到根节点domTree = parse(xml_file)rootNode = domTree.documentElement# rootNode.removeChild(rootNode.getElementsByTagName('book')[0])# print(rootNode.toxml())# 在内存中创建一个空的文档doc = xml.dom.minidom.Document()book = doc.createElement('book')book.setAttribute('语言', 'c++')# 子元素中嵌套子元素,并添加文本节点name = doc.createElement('name')name.appendChild(doc.createTextNode('c++基础'))price = doc.createElement('价格')price.appendChild(doc.createTextNode('200元'))number = doc.createElement('number')number.appendChild(doc.createTextNode('剩余300本'))#  将子元素添加到boot节点中book.appendChild(name)book.appendChild(price)book.appendChild(number)math_book = rootNode.getElementsByTagName('book')[0]# insertBefore方法  父节点.insertBefore(新节点,父节点中的子节点)rootNode.insertBefore(book, math_book)# appendChild将新产生的子元素在最后插入rootNode.appendChild(book)print(rootNode.toxml())with open(xml_file, 'w', encoding='utf-8') as fh:    domTree.writexml(fh, indent='', addindent='\t', newl='', encoding='utf-8')

输出结果:添加了新节点
Python如何操作XML文件

五、XML文件和JSON文件互转

记录工作中常用的一个小技巧

cmd控制台安装第三方模块

pip install xmltodict

1、XML文件转为jsON文件

新建一个1.xml文件:

<note date="23/04/2022"><to>tom</to><from>mary</from><msg>love</msg></note>

Python如何操作XML文件

转换代码实现

import jsonimport xmltodictdef xml_to_json(xml_str):    """parse是的xml解析器,参数需要    :param xml_str: xml字符串    :return: json字符串    """    xml_parse = xmltodict.parse(xml_str)    # json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。    # dumps()方法的ident=1,格式化json    json_str = json.dumps(xml_parse, indent=1)    return json_strXML_PATH = './1.xml'  # xml文件的路径with open(XML_PATH, 'r') as f:    xmlfile = f.read()    with open(XML_PATH[:-3] + 'json', 'w') as newfile:        newfile.write(xml_to_json(xmlfile))

输出结果(生成json文件):
Python如何操作XML文件

2、JSON文件转换为XML文件

新建test.json文件:

{  "student": {    "course": {      "name": "math",      "score": "90"    },    "info": {      "sex": "male",      "name": "name"    },    "stid": "10213"  }}

Python如何操作XML文件

转换代码实现:

import xmltodictimport jsondef json_to_xml(python_dict):    """xmltodict库的unparse()json转xml    :param python_dict: python的字典对象    :return: xml字符串    """    xml_str = xmltodict.unparse(python_dict)    return xml_strJSON_PATH = './test.json'  # json文件的路径with open(JSON_PATH, 'r') as f:    jsonfile = f.read()    python_dict = json.loads(jsonfile)  # 将json字符串转换为python字典对象    with open(JSON_PATH[:-4] + 'xml', 'w') as newfile:        newfile.write(json_to_xml(python_dict))

输出结果(生成xml文件):
Python如何操作XML文件

到此,关于“Python如何操作XML文件”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Python如何操作XML文件

本文链接: https://lsjlt.com/news/328681.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python如何操作XML文件
    这篇文章主要介绍“Python如何操作XML文件”,在日常操作中,相信很多人在Python如何操作XML文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何操作XML文件”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • python操作Xml文件
    一、简单介绍Xml是实现不同语言或程序进行数据交换的协议,跟json差不多,但是xml远远先于json出现,例如在很多传统的金融行业的很多系统接口还主要是xml格式。Xml的格式如下:<Settings modified="2016-...
    99+
    2023-01-31
    操作 文件 python
  • 三十二、python操作XML文件
    ''' XML:模块 xml总结 1、解析 str 文件 tree,ElementTree,type root,Element,type 2、操作 Element: tag,text,fin...
    99+
    2023-01-31
    操作 文件 三十二
  • java 如何使用org.w3c.dom操作XML文件
    本篇介绍在java中,如何使用org.w3c.dom中的相关内容来操作XML文件。包括: 如何在内存中构建XML文件并写入磁盘; 如何从磁盘读取XML文件到内存; ...
    99+
    2024-04-02
  • python处理xml文件操作详解
    目录1、python 操作xml的方式介绍2、ElementTree模块3、解析xml格式字符串并获取根节点4、读取节点内容,getroot()5、通标标签名直接获取标签(find,...
    99+
    2024-04-02
  • Python操作XML文件的使用指南
    目录什么是 XMLPython XML 解析模块xml.etree.ElementTree 模块使用 parse() 函数使用 fromstring() 函数寻找感兴趣的元素修改 X...
    99+
    2024-04-02
  • Python操作xml
    Xml XML指可扩展标记语言(Extensible Markup Language) XML被设计用于结构化、存储和传输数据 XML是一种标记语言,很类似于HTML XML没有像HTML那样具有预定义标签,需要程序员自定义标签。 ...
    99+
    2023-01-31
    操作 Python xml
  • python如何通过ElementTree操作XML
    这篇文章主要介绍“python如何通过ElementTree操作XML”,在日常操作中,相信很多人在python如何通过ElementTree操作XML问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”pytho...
    99+
    2023-07-02
  • python如何操作yml文件
    使用python操作yml文件的方法:1.新建python项目;2.导入yaml和os模块;3.使用os.path.join()方法获取配置文件路径;4.使用read()方法修改yml配置文件;具体步骤如下:首先,打开python,并新建一...
    99+
    2024-04-02
  • C#操作xml文件的方法
    本篇内容介绍了“C#操作xml文件的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#操作xml文件实例是如何的呢?让我们先看看问题:已...
    99+
    2023-06-17
  • Python对XML文件实现增删改查操作
    目录PYTHON 操作 XML读取XML文件遍历XML元素查找XML元素添加XML元素修改XML元素PYTHON 操作 XML 读取XML文件 关于XML的介绍 <data&g...
    99+
    2022-11-13
    Python XML增删改查 Python XML操作 Python XML修改
  • PHP如何操作XML
    本篇内容介绍了“PHP如何操作XML”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php操作XML<xml version=...
    99+
    2023-06-30
  • 利用dom4j如何实现操作xml文件中的demo
    本篇文章为大家展示了利用dom4j如何实现操作xml文件中的demo,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。废话不多说,直接上代码package com.cn.shop.util;import...
    99+
    2023-05-31
    dom4j xml demo
  • C#实用教程操作xml文件
    操作XML文件是C#编程中非常常见的任务之一。下面是一个简单的C#实用教程,演示如何使用C#读取、编辑和保存XML文件。读取XML文...
    99+
    2023-09-15
    C#
  • C#实现XML文件操作详解
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-23
    C# XML文件操作 C# XML 操作 C# XML
  • C#.NET如何操作XML
    小编给大家分享一下C#.NET如何操作XML,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!如何让C#.NET操作XML?需要添加的命名空间:using System.Xml;要完成C#.NET操作XML,首先定义...
    99+
    2023-06-18
  • 如何进行Python文件的操作
    本篇内容主要讲解“如何进行Python文件的操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何进行Python文件的操作”吧!1. 文件的读写原理:文件的读写称为I/O操作。操作原理:.py...
    99+
    2023-06-14
  • Python中如何操作文件路径
    本篇文章为大家展示了Python中如何操作文件路径,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python文件路径操作方法之1: os.listdir(path) //path为目录功能相当于在p...
    99+
    2023-06-17
  • Python如何批量操作Excel文件
    小编给大家分享一下Python如何批量操作Excel文件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!批量操作OS模块介绍OS的全称是Operation System,指操作系统。在Python里面OS模块中主要提供了与操...
    99+
    2023-06-25
  • Python如何实现文件夹操作
    本文小编为大家详细介绍“Python如何实现文件夹操作”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何实现文件夹操作”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、文件操作1.1 文件常规操作操...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作