当前位置: 首页 > article >正文

XML文件格式的简介及如何用Python3处理XML格式对象

诸神缄默不语-个人技术博文与视频目录

文章目录

  • 1. XML格式简介
  • 2. 格式化XML文件的工具
  • 3. Python处理XML:xml库
    • 1. xml.etree.\(c\)ElementTree
    • 2. xml.dom.minidom
  • 4. 本文撰写过程中参考的其他网络资料

1. XML格式简介

可扩展标记语言 (Extensible Markup Language, XML)

总之也是一种用来定义数据规范的纯文本格式。呃但是也可以拿来按这种规范来存储数据。
大小写敏感。

示例:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="osg.AndroidExample"android:installLocation="preferExternal"android:versionCode="1"android:versionName="1.0"><uses-sdk android:targetSdkVersion="8" android:minSdkVersion="8"></uses-sdk><uses-feature android:glEsVersion="0x00020000"/> <!-- OpenGL min requierements (2.0) --><uses-permission android:name="android.permission.INTERNET"/><application android:label="@string/app_name" android:icon="@drawable/osg"><activity android:name=".osgViewer"android:label="@string/app_name" android:screenOrientation="landscape"> <!--  Force screen to landscape --><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
</manifest>

格式上有点类似于HTML,由XML元素组成,每个XML元素包括一个开始标记(<factor_name>),一个结束标记(</factor_name>)以及两个标记之间的内容。
有且只有一个根元素。就是紧接着声明后面建立的第一个元素,其他元素都是这个根元素的子元素,根元素完全包括文档中其他所有的元素。根元素的起始标记要放在所有其他元素的起始标记之前;根元素的结束标记要放在所有其他元素的结束标记之后。

XML声明是XML文档的第一句,其格式如下:
<?xml version="1.0" encoding="utf-8"?>

所有属性值必须加引号(可以是单引号,也可以是双引号,建议使用双引号)。

2. 格式化XML文件的工具

在线格式化:https://c.runoob.com/front-end/710/

也可以用VSCode上的这个插件:
在这里插入图片描述
安装后打开XML文件时,在窗口中右键选择“Format Document”就能格式化XML文件。

3. Python处理XML:xml库

本节各小节用的原XML文件都大致长这样:
在这里插入图片描述
实际上是从C:\Users\user_name\AppData\Roaming\Tencent\WeChat\3\host里面随便抓的一个XML文件。

1. xml.etree.(c)ElementTree

try:import xml.etree.cElementTree as ET
except ImportError:import xml.etree.ElementTree as ET

cElementTree是用C写的更快的实现。接口用法看起来都是一样的。

模块的类:
ElementTree:是一个层级式的XML元素。
ElementTree.Element(tag)是一个XML元素。

模块函数:
ElementTree.SubElement(parent,tag):为XML元素增加一个子元素,返回这个子元素(一个Element实例)。
ElementTree.parse(xml_file_path):解析一个XML文档为ElementTree对象

ElementTree对象的函数:
getroot():返回根元素(一个Element实例)
write(file_or_filename,encoding)

Element对象的属性:
tag
text

Element对象的方法:
findall(tag):返回当前Element对象的指定tag的所有子元素(一个Element的迭代器)
find(tag):返回当前Element对象的指定tag的第一个子元素(一个Element对象)
append(subelement:Element):给当前Element对象增加一个子元素(一个Element对象)

示例代码:

按照指定tag查询子元素的子元素的第一个子元素的text的代码示例:

import xml.etree.ElementTree as ETtree = ET.parse(r'trys\example.xml')
root=tree.getroot()
for function in root.findall('function'):for domainlist in function.findall('domainlist'):domain=domainlist.find('domain')print(domain.text)breakbreak

输出:long.weixin.qq.com

↑注意在这里我们可以发现xml对象中,每一层只能检索(不管是用find还是findall)当前对象的属性,就是说如果你跨级检索就检索不到。

在现成的XML文件中增加一个子元素的代码示例:

import xml.etree.ElementTree as ETtree = ET.parse(r"trys\example.xml")
root = tree.getroot()
book = ET.Element("book")
title = ET.SubElement(book, "title")
title.text = "机器学习"
root.append(book)
tree.write(r"trys\example2.xml", encoding="utf-8")

输出XML文件最后的内容示例(注意这是我用XML插件格式化后的效果):
在这里插入图片描述

2. xml.dom.minidom

官方文档:https://docs.python.org/3/library/xml.dom.minidom.html

模块类:
Document
Element
Node
Text

模块函数:
parseString(string):将XML字符串转化为xml.DOM(Document对象)

Document对象的属性:
documentElement:获取DOM的根元素

Document对象的函数:
writexml(file_writer:TextIOWrapper,indent:str,addindent:str,newl:str):将DOM写入文本文件,所以此处的TextIOWrapper需要是可写的。

Element对象的属性:
childNodes:理论上是返回子节点列表(xml.dom.minicompat.NodeList对象),每个元素是一个Node,但是事实上会直接实例化成具体的Node分类(如示例中的Text对象)。这个好像只在没有子元素的元素里才有用,可以从其第一个元素里获得data属性,这个就是Element对象的文本。具体的可以见示例代码

Element对象的函数:
getElementsByTagName(tag):获取当前Element对象所有指定tag的子元素,返回一个xml.dom.minicompat.NodeList对象,这个对象是可以用索引直接获取每个元素(Element实例)的
getAttribute(attname):根据属性名获取当前Element的属性值

Text对象的属性:
data:文字
nodeType:3(Node.TEXT_NODE的值)

Node对象的属性:
在这里插入图片描述

示例代码,简单版:

from xml.dom.minidom import parseStringxml_str=open(r"trys\example.xml",encoding="utf-8").read()
doc=parseString(xml_str)
functionlist=doc.documentElementfunction_iterator=functionlist.getElementsByTagName("function")
function1=function_iterator[0]  #xml.dom.minidom.Element对象
print(function1.getAttribute("name"))  #输出:basicdomain_lists=function1.getElementsByTagName("domainlist")
domain_list1=domain_lists[0]domains=domain_list1.getElementsByTagName("domain")
domain1=domains[0]childnodes=domain1.childNodes  #xml.dom.minicompat.NodeList对象
the_childnode=childnodes[0]  #xml.dom.minidom.Text对象
print(the_childnode.nodeType)  #输出:3
print(the_childnode.data)  #输出:long.weixin.qq.com

在真实项目中的使用代码可以参考我的另一篇博文:如何用Python 3调用ArXiv API查询ArXiv论文元数据

4. 本文撰写过程中参考的其他网络资料

  1. 可扩展标记语言_百度百科
  2. XML到底是干什么的? - 知乎

相关文章:

XML文件格式的简介及如何用Python3处理XML格式对象

诸神缄默不语-个人技术博文与视频目录 文章目录 1. XML格式简介2. 格式化XML文件的工具3. Python处理XML&#xff1a;xml库1. xml.etree.\(c\)ElementTree2. xml.dom.minidom 4. 本文撰写过程中参考的其他网络资料 1. XML格式简介 可扩展标记语言 (Extensible Markup Language…...

通过qemu仿真树莓派系统调试IoT固件和程序

通过qemu仿真树莓派系统调试IoT固件和程序 本文将介绍如何使用 QEMU 模拟器在 x86 架构的主机上运行 Raspberry Pi OS&#xff08;树莓派操作系统&#xff09;。我们将从下载镜像、提取内核和设备树文件&#xff0c;到启动模拟环境&#xff0c;并进行一些常见的操作&#xff0…...

Oracle底层原理解析

Oracle 解析 1、union \ union all \ Intersect \ Minus内部处理机制&#xff08;优化&#xff09; 当查询语句中的where子句中使用到or时&#xff0c;可以用union all来代替。因为使用or查询语句的时候&#xff0c;引起全表扫描&#xff0c;并走索引查询 特别&#xff1a;当…...

深度解读DeepSeek部署使用安全(48页PPT)(文末有下载方式)

深度解读DeepSeek&#xff1a;部署、使用与安全 详细资料请看本解读文章的最后内容。 引言 DeepSeek作为一款先进的人工智能模型&#xff0c;其部署、使用与安全性是用户最为关注的三大核心问题。本文将从本地化部署、使用方法与技巧、以及安全性三个方面&#xff0c;对Deep…...

【前端三剑客】万字总结JavaScript

一、初识JavaScript 1.1 JavaScript 的作用 表单动态校验&#xff08;密码强度检测&#xff09; &#xff08; JS 产生最初的目的 &#xff09;网页特效服务端开发(Node.js)桌面程序(Electron)App(Cordova)控制硬件-物联网(Ruff)游戏开发(cocos2d-js) 1.2 HTML/CSS/JS 的关系…...

【哈希表与字符串的算法之路:思路与实现】—— LeetCode

文章目录 两数之和面试题01.02.判定是否为字符重排存在重复元素存在重复元素||字母异位词分组最长公共前缀和最长回文子串二进制求和字符串相乘 两数之和 这题的思路很简单&#xff0c;在读完题目之后&#xff0c;便可以想到暴力枚举&#xff0c;直接遍历整个数组两遍即可&…...

基于Android的记事本APP设计与实现:从需求分析到功能实现(超级简单记事本,附源码+文档报告)

基于Android的记事本APP设计与实现&#xff1a;从需求分析到功能实现 &#xff08;以前大学课堂作业&#xff0c;抄在这里当个回忆吧&#xff09; 引言 随着社会的不断进步&#xff0c;信息化建设不断发展&#xff0c;电子文字输入在生活、学习、工作中占有越来越重要的作用…...

eNSP中路由器的CON/AUX接口、GE Combo接口、Mini USB接口、USB接口、WAN侧uplink接口、FE接口、GE接口介绍

路由器常见接口的详细介绍及其应用示例&#xff1a; 1. CON/AUX 接口 全称&#xff1a;Console/Auxiliary&#xff08;控制台/辅助接口&#xff09;作用&#xff1a; CON&#xff08;Console&#xff09;&#xff1a;通过命令行界面&#xff08;CLI&#xff09;直接配置路由器…...

Hello Mr. My Yesterday日文歌词附假名注音,祭奠逝去的青春

hello mr. my yesterday Hundred Percent Free Hello Mr. my yesterday云っておくれよ “夢叶うその瞬間にまた逢える”と 前方の幾多前途多難の未知 後方の道後悔も知った 経験と価値 夢なかば 一本の道結果だが ひとつだけ知りたいよ 神様がいるのなら “幸せの定義っ…...

ubuntu ollama+dify实践

安装ollama 官网的指令太慢了&#xff0c;使用以下指令加速&#xff1a; export OLLAMA_MIRROR"https://ghproxy.cn/https://github.com/ollama/ollama/releases/latest/download" curl -fsSL https://ollama.com/install.sh | sed "s|https://ollama.com/dow…...

S7-1200 G2移植旧版本S7-1200程序的具体方法示例

S7-1200 G2移植旧版本S7-1200程序的具体方法示例 前期概要: S7-1200 G2必须基于TIA博途V20,之前的程序可通过移植的方式在新硬件上使用。 该移植工具可自动将TIA Portal 项目从 S7-1200 移植到更新的S7-1200 G2。 注意: 该插件支持在同一TIA Portal项目实例内将软件和/或硬…...

新办公室哪款空气净化器除甲醛效果好?高效除甲醛,提升效率

现代办公环境中&#xff0c;空气质量对员工的健康与工作效率产生着不可忽视的影响。尤其是新装修的办公室&#xff0c;往往因为空气中的甲醛浓度超标而导致一系列健康问题。因此&#xff0c;选择一款性能优越的除甲醛空气净化器就显得尤为重要。合适的空气净化器不仅可以有效过…...

塑造企业数字化形象:企业信息化UI界面设计的关键要素

引言 在数字化转型的大潮中&#xff0c;企业信息化系统的UI&#xff08;用户界面&#xff09;界面设计不仅是技术实现的最后一环&#xff0c;更是塑造企业数字化形象、提升用户体验、增强业务效率的重要手段。优秀的UI设计能够直观展现企业价值观&#xff0c;提升用户粘性&…...

大视频背景暗黑风格的wordpress企业主题免费下载

整体风格是黑色的&#xff0c;首页首屏大视频背景&#xff0c;动态效果非常好。向下滚动时&#xff0c;滚动的特效也不错。 原文 https://www.bixugao.com/wp/26.html...

CUDA编程之内存零拷贝技术

一、实现原理 零拷贝内存通过将‌主机锁页内存‌直接映射到设备地址空间&#xff0c;实现CPU与GPU共享内存&#xff0c;避免显式数据拷贝‌。锁页内存通过cudaHostAlloc或cudaHostRegister分配&#xff0c;确保物理地址固定且不被操作系统换页&#xff0c;从而支持DMA&#xff…...

C语言基础知识04

指针 指针概念 指针保存地址&#xff0c;地址是字节的编号 指针类型和保存的地址类型要一直 使用时注意&#xff0c;把地址转换为&变量的格式来看 int a[3]; a转为&a[0] 指针的大小 64bit 固定8字节&#xff0c; 32bit 固定4字节 指针…...

在 Java 中,== 和 equals 的区别

1. 运算符 作用&#xff1a;比较两个对象的 内存地址&#xff08;引用类型&#xff09;或 值&#xff08;基本数据类型&#xff09;。 适用场景&#xff1a; 基本数据类型&#xff08;int, char, boolean 等&#xff09;&#xff1a;直接比较值是否相等。 引用类型&#xff…...

Qt开发:QtWebEngine中操作选择文本

查找选择 在QtWebEngine中&#xff0c;可以使用QWebEnginePage的findText方法来查找文本&#xff0c;查找成功以后&#xff0c;将自动选择当前文本。 QWebEnginePage可以通过QWebEngineView的page()来取得。 比如&#xff0c;如下代码可以在页面中查找hello,world并选择。 …...

VUE的脚手架搭建引入类库

VUE的小白脚手架搭建 真的好久好久自己没有发布自己博客了,对于一直在做后端开发的我 ,由于社会卷啊卷只好学习下怎么搭建前端,一起学习成长吧~哈哈哈(最终目的,能够懂并简易开发) 文章目录 VUE的小白脚手架搭建1.下载node.js2.安装vue脚手架3.创建一个项目4.代码规范约束配置(…...

分布式系统日志排查综合场景

排查背景 在一个大型分布式电商系统中&#xff0c;用户反馈在进行商品结算时出现了报错。系统由多个子系统构成&#xff0c;包括商品管理系统、订单系统、支付系统等&#xff0c;各子系统分布在不同服务器上&#xff0c;且日志文件分散存储。 排查过程 确定当前位置并切换到可…...

android lmkd.rc 介绍

service service lmkd /system/bin/lmkdclass coreuser lmkdgroup lmkd system readproccapabilities DAC_OVERRIDE KILL IPC_LOCK SYS_NICE SYS_RESOURCEcriticalsocket lmkd seqpacketpasscred 0660 system systemtask_profiles ServiceCapacityLow属于核心服务组&#xff0…...

Android Studio执行Run操作报Couldn‘t terminate previous instance of app错误

步骤1、在项目根目录下build.gradle文件最后添加如下内容 //自定义任务名&#xff1a;assembleAndInstall tasks.register(assembleAndInstall, Exec.class, new Action<Exec>() {Overridevoid execute(Exec exec) {//设置自定义任务组名exec.setGroup(custom task)//当…...

Matlab 双线性插值(二维)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 双线性插值是一种 二维插值方法,用于计算 栅格(Grid) 或 像素点 之间的插值值。它主要用于 图像缩放、旋转、变换 等操作,以在新像素位置估算灰度值或颜色值。 如上图所示,假设存在一个二维离散函数(如图像)…...

1700. 无法吃午餐的学生数量

无法吃午餐的学生数量 题目描述尝试做法推荐做法 题目描述 学校的自助午餐提供圆形和方形的三明治&#xff0c;分别用数字 0 和 1 表示。所有学生站在一个队列里&#xff0c;每个学生要么喜欢圆形的要么喜欢方形的。 餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个…...

uv命令介绍(高性能Python包管理工具,旨在替代pip、pip-tools和virtualenv等传统工具)

文章目录 **主要功能**1. **快速安装和管理 Python 包**2. **生成和管理锁文件 (requirements.lock)**3. **创建虚拟环境**4. **与 poetry 兼容** **核心优势**1. **极快的速度**&#xff1a;基于 Rust 实现&#xff0c;利用多线程和缓存大幅加速依赖解析。2. **轻量且独立**&a…...

杨辉三角形(信息学奥赛一本通-2043)

【题目描述】 例5.11 打印杨辉三角形的前n(2≤n≤20)行。杨辉三角形如下图&#xff1a; 当n5时 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 输出&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 【输入】 输入行数n。 【输出】 输出如题述三角形。n行&#…...

使用easyexcel实现单元格样式设置和下拉框设置

1.单元格样式设置 1.1实体类 public class DemoData {ExcelProperty("PK")private String name;ExcelProperty("年龄")private int age;// 必须提供无参构造方法public DemoData() {}public DemoData(String name, int age) {this.name name;this.age …...

TCP 三次握手四次挥手过程详解

注&#xff1a;本文为 “TCP 的三次握手与四次挥手” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;未整理去重。 英文引文第二篇&#xff0c;实为国内《稀土掘金技术社区》文章&#xff0c;没检索到原文&#xff0c;此处 “出口转内销” 。 如有内…...

射频相关概念

射频&#xff08;Radio Frequency, RF) 是电磁波谱中频率范围在 3 kHz 到 300GHz的电磁波&#xff0c;广泛应用于通信、雷达、广播、医疗等领域。其基本原理涉及电磁波的产生、传播、调制与解调&#xff0c;以及射频系统的设计。以下是射频技术的核心要点&#xff1a; 1. 电磁…...

几款可用于绘制工艺原理图的开源框架

一、LogicFlow 由滴滴团队开发的开源流程图框架&#xff0c;支持高度定制的工艺原理图绘制。 • 核心特性&#xff1a; • 提供拖拽式界面和丰富的节点类型&#xff08;矩形、圆形、多边形等&#xff09;&#xff0c;支持自定义节点形状、样式和交互逻辑。 • 支持插件扩展&am…...