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

39.Python从入门到精通—parseString 方法 Python 解析XML实例 使用xml.dom解析xml

39.Python从入门到精通—parseString 方法 Python 解析XML实例 使用xml.dom解析xml

    • parseString 方法
    • Python 解析XML实例
    • 使用xml.dom解析xml

parseString 方法

parseString 方法是 Python 标准库中 xml.dom.minidom 模块中的一个函数,用于解析 XML 字符串并构建 DOM 树。它的语法如下:

xml.dom.minidom.parseString(xmlstring)

其中,xmlstring 是要解析的 XML 字符串。 使用 parseString 方法可以将 XML 字符串解析为一个 DOM树,然后可以使用 DOM 树提供的方法对 XML 文档进行遍历和操作。

以下是一个使用 parseString 方法解析 XML 字符串的简单示例:

import xml.dom.minidomxmlstring = '<person><name>Alice</name><age>18</age></person>'
# 解析 XML 字符串
dom = xml.dom.minidom.parseString(xmlstring)
# 获取根节点
root = dom.documentElement
# 获取子节点
name = root.getElementsByTagName('name')[0]
age = root.getElementsByTagName('age')[0]
# 获取节点的文本内容
name_text = name.firstChild.data
age_text = age.firstChild.data
print(name_text, age_text)
  • 在这个示例中,我们使用 parseString 方法解析了一个 XML 字符串,并获取了根节点和子节点。然后我们使getElementsByTagName 方法获取指定标签名的节点,并使用 firstChild.data获取节点的文本内容。最后,我们输出了节点的文本内容。

需要注意的是,使用 parseString 方法解析 XML 字符串时,如果 XML 字符串格式不正确,会抛出异常。此外,使用 minidom 解析大型 XML 文档时可能会导致性能问题。

Python 解析XML实例

以下是一个使用 Python 解析 XML 的实例,其中使用了 ElementTree 解析库:

XML 文件内容(example.xml):
<?xml version="1.0" encoding="UTF-8"?>
<bookstore><book category="COOKING"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price></book><book category="CHILDREN"><title lang="en">Harry Potter</title><author>J.K. Rowling</author><year>2005</year><price>29.99</price></book><book category="WEB"><title lang="en">Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price></book>
</bookstore>

Python 代码:

import xml.etree.ElementTree as ET# 解析 XML 文件
tree = ET.parse('example.xml')# 获取根节点
root = tree.getroot()# 遍历子节点
for child in root:print(child.tag, child.attrib)# 获取指定节点
book = root.find(".//book[@category='WEB']")
title = book.find('title').text
author = book.find('author').text
year = book.find('year').text
price = book.find('price').text
print(title, author, year, price)# 使用 XPath 查询
books = root.findall(".//book[price < 30]")
for book in books:title = book.find('title').textauthor = book.find('author').textyear = book.find('year').textprice = book.find('price').textprint(title, author, year, price)输出结果:
book {'category': 'COOKING'}
book {'category': 'CHILDREN'}
book {'category': 'WEB'}
Learning XML Erik T. Ray 2003 39.95
Everyday Italian Giada De Laurentiis 2005 30.00

在这个示例中,我们使用 ElementTree 解析库解析了一个 XML 文件,并使用 getroot() 方法获取了根节点。然后我们使用
for 循环遍历根节点的所有子节点,并输出节点的标签和属性。接着我们使用 find() 方法获取指定节点的文本内容。最后,我们使用
XPath 查询获取所有价格小于 30 的书籍,并输出书籍的信息。

使用xml.dom解析xml

在 Python 中,解析 XML 文件的另一种常用方法是使用 xml.dom 模块中的 minidom 类。该类提供了一种基于 DOM(Document Object Model)的解析方式,将整个 XML 文件加载到内存中,并将其表示为一个树形结构。
以下是一个示例代码:

import xml.dom.minidom# 解析 XML 文件
dom = xml.dom.minidom.parse('example.xml')
# 获取根元素
root = dom.documentElement
# 遍历 XML 文件
for child in root.childNodes:if child.nodeType == child.ELEMENT_NODE:print(child.tagName, child.attributes.items())for subchild in child.childNodes:if subchild.nodeType == subchild.ELEMENT_NODE:print(subchild.tagName, subchild.firstChild.nodeValue)
  • 在这个例子中,我们首先使用 xml.dom.minidom.parse() 方法解析名为 example.xml 的 XML文件,并将返回的 Document 对象存储在变量 dom 中。然后,我们使用dom.documentElement 方法获取 XML文件的根元素,并将其存储在变量 root 中。
  • 接下来,我们使用 childNodes 属性遍历根元素的子元素,并使用 nodeType属性判断节点类型是否为元素节点。如果是元素节点,我们就使用 tagName 属性获取元素的标签名,使用
    attributes.items() 方法获取元素的属性,并打印它们。然后,我们再次使用 childNodes属性遍历每个子元素的子元素,并使用 nodeType 属性判断节点类型是否为元素节点。如果是元素节点,我们就使用 tagName属性获取元素的标签名,使用 firstChild.nodeValue 属性获取元素的文本内容,并打印它们。
  • 需要注意的是,在使用 xml.dom.minidom 模块解析 XML 文件时,需要将整个 XML 文件加载到内存中,因此对于较大的XML 文件可能会导致性能问题。此外,使用 childNodes 属性和 nodeType 属性遍历 XML元素也比较繁琐,需要进行多次判断和类型转换。

总的来说,使用 xml.dom.minidom 模块解析 XML 文件可以提供一种基于 DOM 的解析方式,适用于小型的 XML 文件和简单的 XML 结构。对于更复杂的 XML 文件和结构,可能需要使用其他方法或库来解析和操作它们。

相关文章:

39.Python从入门到精通—parseString 方法 Python 解析XML实例 使用xml.dom解析xml

39.Python从入门到精通—parseString 方法 Python 解析XML实例 使用xml.dom解析xml parseString 方法Python 解析XML实例使用xml.dom解析xml parseString 方法 parseString 方法是 Python 标准库中 xml.dom.minidom 模块中的一个函数&#xff0c;用于解析 XML 字符串并构建 DO…...

【蓝桥杯第九场小白赛】(部分)

最近写的零零散散的&#xff0c;感觉这两天遇到的题对于短时间提升意义已经不大了&#xff0c;还是做简单题保持手感吧哎 盖印章 #include <iostream> using namespace std; using LLlong long; int main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);LL n,m…...

【Linux】Supervisor 基础

要在Linux上启动Supervisor&#xff0c;你可以按照以下步骤进行操作&#xff1a; 确保你已经安装了Supervisor。使用适合你的Linux发行版的包管理器进行安装。例如&#xff0c;对于Ubuntu&#xff0c;可以运行以下命令安装Supervisor&#xff1a; sudo apt-get update sudo apt…...

48 全连接卷积神经网络 FCN【动手学深度学习v2】

全连接卷积神经网络&#xff1a;神经网络处理语义分割问题的奠基性工作&#xff0c;目前已不太常用。 了解一下全卷积网络模型最基本的设计。 如 下图所示&#xff0c;全卷积网络先使用卷积神经网络抽取图像特征&#xff0c;然后通过11卷积层将通道数变换为类别个数&#xff0…...

pytorch中的nn.MSELoss()均方误差损失函数

一、nn.MSELoss()是PyTorch中的一个损失函数&#xff0c;用于计算均方误差损失。 均方误差损失函数通常用于回归问题中&#xff0c;它的作用是计算目标值和模型预测值之间的平方差的平均值。 具体来说&#xff0c;nn.MSELoss()函数的输入是两个张量&#xff0c;即模型的真实值…...

三国游戏(贪心 排序)

三国游戏 利用贪心、排序、前缀和的计算方法&#xff0c;特别注意不要数据溢出了&#xff0c;sum 加long long s[i] x[i]-y[i]-z[i]输入: 3 1 2 2 2 3 2 1 0 7输出: 2#include <bits/stdc.h> using namespace std;const int N 1e5100;typedef long long ll;bool cm…...

GPU环境安装与虚拟环境安装(适用于Windows下的李沐GPU)

之前我是用的都是VMware的虚拟机且安装的是cpu的pytorch版本,因为想要使用GPU,最终实现了在Windows上使用GPU,并且相关原理也在参考文章或视频内,可以通过原理自行挑选自己所需的配置并安装。 文章目录 1.GPU安装1.1 名词解释1.2 卸载旧版本的CUDA1.3 版本选择步骤(Nivida显卡…...

Http Download

Http / Https 下载文件&#xff0c;startWith不能验证https&#xff0c;测试地址&#xff1a;https://storage.googleapis.com/golang/go1.7.3.windows-amd64.msi private static final Logger logger Logger.getLogger(MethodHandles.lookup().lookupClass());private static…...

【Android】Glide加载SVG,SVG转PNG

Dependency plugins {id kotlin-kapt }dependencies {api com.github.bumptech.glide:glide:4.12.0kapt com.github.bumptech.glide:compiler:4.12.0api com.caverock:androidsvg:1.4 }SvgDecoder 负责解码SVG资源 import com.bumptech.glide.load.Options import com.bumpte…...

Spring、SpringMVC、Springboot三者的区别和联系

1.背景 最近有人问面试的一个问题&#xff1a;Spring、SpringMVC、Springboot三者的区别和联系&#xff0c;个人觉得&#xff1a;万变不离其宗&#xff0c;只需要理解其原理&#xff0c;回答问题信手拈来。 2.三者区别和联系 2.1 先了解Spring基础 Spring 框架就像一个家族…...

一点点安全资料:网络安全扩展

协议扩展 加密协议SSL/TLS 简介 SSL&#xff08;Secure Sockets Layer&#xff09;和TLS&#xff08;Transport Layer Security&#xff09;是加密协议&#xff0c;设计用来提供网络通信的安全性和数据完整性。尽管TLS是SSL的后继者&#xff0c;但两者的核心目标相同&#x…...

vscode的源码插件GitHub Repositories

打铁还需自身硬&#xff0c;需要不断提升自我&#xff0c;提升自我的一种方式就是看源码&#xff0c;站在更高的维度去理解底层原理&#xff0c;以便以后更好的开发和解决问题&#xff0c;由于源码一个动不动就是几个G甚至十几个G&#xff0c;如果一个个源码下载下来&#xff0…...

如何定义快速开发平台框架?有何突出优势?

作为提质增效的利器软件&#xff0c;快速开发平台框架如何能在众多同行中取胜&#xff1f;又是凭借什么优势特点在激烈的市场竞争中获得众多客户的青睐与信任&#xff1f;不管是从企业角度、服务商角度&#xff0c;还是使用者的角度来说&#xff0c;做好流程化进程&#xff0c;…...

二分练习题——奶牛晒衣服

奶牛晒衣服 题目分析 这里出现了“弄干所有衣服的最小时间”&#xff0c;那么可以考虑用二分去做。 第一阶段二段性分析 假设当前需要耗费的时间为mid分钟&#xff0c;如果mid分钟内可以烘干这些衣服&#xff0c;那么我们可以确定右边界大于mid的区间一定也可以。但是此时我…...

python工具包【1】 -- 不同操作系统路径转换

python工具包【1】 – 不同操作系统路径转换 以下的工具类的作用是根据不同的操作系统&#xff0c;将代码中的路径转换成适应操作系统的路径。 代码 import osclass Base_Tools_Cls:def BasePathConvert_func(self, path):根据不同的操作系统&#xff0c;将路径进行转换为不…...

JAVA中@FunctionalInterface 注解使用

FunctionalInterface是Java 8引入的一个注解&#xff0c;用于标记一个接口为函数式接口。函数式接口是指只有一个抽象方法&#xff08;除了Object类中的默认方法如equals、hashCode等&#xff09;的接口。在Java 8及以后版本中&#xff0c;函数式接口可以与lambda表达式配合使用…...

【Spring Cloud Alibaba】9 - OpenFeign集成Sentinel实现服务降级

目录 一、简介Sentinel 是什么如何引入Sentinel 二、服务搭建1.安装Sentinel控制台1.1 下载1.2 启动1.3 访问 2.改造服务提供者cloud-provider服务2.1 引入依赖2.2 添加API2.3 添加配置文件 3.改造cloud-consumer-feign服务3.1 引入依赖3.2 添加Feign接口3.3 添加服务降级类3.4…...

Chrome浏览器如何跟踪新开标签的网络请求?

在测试一个东西的时候&#xff0c;它虽然是a链接&#xff0c;但是&#xff0c;是由前端在js里写跳转的。我又必须要知道它的跳转链接&#xff0c;只能用截屏的方式来捕捉浏览器的地址栏链接 打开浏览器控制台(F12)点击红色箭头打钩为弹出式窗口自动打开DevTools 英文版调试参…...

html写一个登录注册页面

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册登录界面Ⅰ</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.mi…...

Stable Diffusion|Ai赋能电商 Inpaint Anything

1. 背景介绍 随着人工智能技术的不断发展&#xff0c;其在电商领域的应用也越来越广泛。其中&#xff0c;图像修复技术在电商领域有着重要的应用价值。例如&#xff0c;在商品图片处理中&#xff0c;去除图片中的水印、瑕疵等&#xff0c;可以提高商品图片的质量和美观度。 2…...

ComfyUI Video Combine节点3个核心技巧:解决视频合并常见问题

ComfyUI Video Combine节点3个核心技巧&#xff1a;解决视频合并常见问题 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 在AI动画创作中&#xff0c;ComfyUI的Vi…...

低温预警!固化慢、易开裂……密封胶冬季施工手册

低温预警!固化慢、易开裂……密封胶冬季施工手册 硅酮耐候密封胶主要作用是保障幕墙的气密性、水密性。其出现问题,可能会导致耐候密封失效,从而造成幕墙漏水漏气,影响幕墙的正常使用。耐候密封胶由于考虑到现场施工,几乎都是单组分硅酮密封胶产品。进入冬季,气候变化明…...

Ruby专属LLM应用框架ruby_llm:从基础集成到生产部署实战

1. 项目概述&#xff1a;一个为Ruby语言量身打造的LLM应用框架如果你是一名Ruby开发者&#xff0c;最近被各种大语言模型&#xff08;LLM&#xff09;的应用搞得心痒痒&#xff0c;但看着满世界的Python库和框架感到无从下手&#xff0c;那么crmne/ruby_llm这个项目可能就是你在…...

DIY蓝牙游戏手柄:基于Bluefruit EZ-Key的免编程硬件制作全攻略

1. 项目概述与设计思路几年前&#xff0c;我还在用有线手柄在电脑上打游戏&#xff0c;那根线总是缠来缠去&#xff0c;桌面也乱糟糟的。后来市面上无线手柄选择多了&#xff0c;但总感觉少了点自己动手的乐趣&#xff0c;功能也千篇一律。直到我开始接触像Adafruit Bluefruit …...

Oracle数据库触发器概述

Oracle数据库触发器概述触发器介绍数据库触发器是一个 已编译的存储程序单元 &#xff0c;使用 PL/SQL 或 Java 编写。 触发器是模式对象&#xff0c;类似于子程序&#xff1b;但其调用方法不同。 子程序由用户、应用程序、或触发器显式运行。而触发器是在触发的事件发生时由 数…...

FastAPI+AI应用脚手架:模块化架构与生产级实践指南

1. 项目概述&#xff1a;一个为AI应用量身定制的FastAPI脚手架如果你正在寻找一个能快速启动、结构清晰且功能强大的AI应用后端框架&#xff0c;那么fastapi-genai-boilerplate这个项目绝对值得你花时间研究。它不是一个简单的“Hello World”示例&#xff0c;而是一个面向生产…...

ARM CoreSight SoC-400调试系统勘误解析与解决方案

1. CoreSight SoC-400调试系统深度解析在嵌入式系统开发领域&#xff0c;调试与跟踪技术是确保系统可靠性的关键环节。作为ARM架构下的核心调试解决方案&#xff0c;CoreSight SoC-400系列为开发者提供了强大的硬件支持。今天我将结合多年实战经验&#xff0c;深入剖析这个系统…...

6000万美元拿下世界杯:FIFA终于清醒了?

5月15号下午&#xff0c;央视和国际足联官宣了新周期的版权合作。朋友圈里炸开了锅&#xff0c;大家都在讨论那个数字&#xff1a;6000万美元。这是2026年美加墨世界杯的中国区转播权价格。说实话&#xff0c;看到这个价格我有点意外。上一届卡塔尔世界杯&#xff0c;传闻中的版…...

OpenClaw量化回测性能调优指南:从数据加载到并行计算的实战优化

1. 项目概述&#xff1a;从开源工具到性能调优的艺术最近在跟几个做量化交易的朋友聊天&#xff0c;他们都在为一个问题头疼&#xff1a;策略回测和实盘执行的速度。动辄几十个G的历史数据&#xff0c;复杂的因子计算&#xff0c;加上高频的模拟交易&#xff0c;一套流程跑下来…...

Outfit字体技术实现:9种字重的几何无衬线字体架构设计与应用实践

Outfit字体技术实现&#xff1a;9种字重的几何无衬线字体架构设计与应用实践 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts 在现代数字产品设计中&#xff0c;字体选择往往决定了界面的视觉层次…...