使用XPATH从XML中提取节目信息
创作时间:
作者:
@小白创作中心
使用XPATH从XML中提取节目信息
引用
CSDN
1.
https://blog.csdn.net/D0126_/article/details/137037676
本文介绍如何使用Python的lxml库和XPath从复杂的XML文件中提取特定信息。通过一个实际案例,展示了如何从包含多个"ProgramInformation"分支的XML结构中提取节目ID、标题和流派信息,并将结果写入外部文件。
XML结构示例
需要从XML中提取一些条目。最开始尝试使用一种相当手动的方式来做到这一点,后来有人建议使用XML解析器。已经尝试使用lxml,但无法掌握它(我刚开始学习Python)。
这是一个XML结构的示例(将会有许多"ProgramInformation"的分支):
<TVAMain xml:lang="NL" publisher="" publicationTime="2013-09-12T01:43:09+00:00" version="217" xmlns="urn:tva:metadata:2010" xmlns:mpeg7="urn:tva:mpeg7:2008" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:tva:metadata:2010>
<ProgramDescription>
<ProgramInformationTable>
<ProgramInformation programId="crid://bds.tv/95291775">
<BasicDescription>
<Title xml:lang="EN" type="main">Rip Off Britain</Title>
<Synopsis xml:lang="EN" length="short">Consumer series. The team investigates why some viewers have been hit with bills they did not expect for hundreds or even thousands of pounds, and offers some advice.</Synopsis>
<Keyword xml:lang="EN" type="main">bills</Keyword>
<Genre href="urn:tva:metadata:cs:UPCEventGenreCS:2009:82">
<Name xml:lang="EN">Economics</Name>
</Genre>
<Language>EN</Language>
</BasicDescription>
</ProgramInformation>
</ProgramInformationTable>
</ProgramDescription>
</TVAMain>
初始尝试
可以使用以下代码检索"crid"和"title":
import xml.etree.ElementTree as etree
tree = etree.parse('UPC_Medium.xml')
root = tree.getroot()
print (root[0][0][0].attrib)
print (root[0][0][0][0][0].text)
这两个项始终位于每个分支下的相同位置(因此理论上可以用这种相当粗略的方式检索它们)。还需要检索流派,但可能会改变(因为会有数量不定的"关键字"条目)。认为XPath是关键,但不知道如何实现它(已经查看了很多关于这个的示例)。
解决方案
以下是使用XPath实现的完整解决方案:
import xml.etree.ElementTree as etree
nsmap = {'xmlns': 'urn:tva:metadata:2010'}
with open('UPC_Medium.xml', 'r') as f:
tree = etree.parse(f)
root = tree.getroot()
for info in root.xpath('//xmlns:ProgramInformation', namespaces=nsmap):
crid = info.get('programId')
title = info.find('.//xmlns:Title', namespaces=nsmap).text
genre = info.find('.//xmlns:Genre/xmlns:Name', namespaces=nsmap).text
# 将信息写入外部文件
with open('output.txt', 'a') as out:
out.write(f'{crid}, {title}, {genre}\n')
上述代码使用ElementTree库解析XML文件并提取所需的信息。通过使用xpath()方法,我们可以使用XPath表达式在XML文档中查找所需的元素。通过get()方法可以获取元素的属性值,通过text属性可以获取元素的文本内容。
最后,使用with语句将信息写入外部文件。with语句确保在发生错误时文件被正确关闭。
热门推荐
守护心脑健康,行动在当下——心脑血管疾病防治策略与健康管理
春光甚好 研学旅游“趣”东营垦利
大明王朝1566吕芳所提的为官三思中,为什么没有类似思进的考虑?
PNAS速递:人体细胞大小和数量的权衡
猫咪的骨骼健康(宠物猫咪的骨骼健康关系到它的一生幸福)
南瓜饼制作教程:蒸制酥脆,口感独特
如何评估企业管理咨询公司方案的有效性?
央视主持人名单新风貌:时代变迁下的文化传承与创新
初学者水下摄影:提示和技巧
压力与脑健康:如何科学管理压力,保护大脑
温室大棚智能控制系统组成设备与功能
心脏射频消融术后需要注意什么
行为主义学派的主要观点及其应用
具有工程纳米晶域的3D打印水凝胶作为功能性血管结构
无人机飞手月薪过万却招不到人?从业者:学费一两万,工资才四千多
开路电压装置、高速脉冲放电等仪器揭示动态放电对电池寿命的积极影响!
娲皇宫:华夏祖庙里的女娲文化传承
退休返聘员工个税怎么交?HR最易踩坑的3个知识点+智能化解方案
小小维生素B2,却能改善多种健康问题,值得收藏!
美国各州病假政策一览:雇主与员工须知
NBA人物志:半人半神,文斯·卡特的巅峰、挑战与传奇
电源线你能分清吗?组装机电源线详细介绍
女人吃什么水果养颜,养身体
【文物图鉴】探索甘肃彩陶:史前文化的色彩宝藏
动荡与重塑的能源新图景
煮粽子技巧:加这两种料让粽子更软糯、营养更丰富!
粽子包法详细图解教程(学习如何包粽子的简易步骤)
ISO 50001能源管理体系认证:企业节能新动力
如何改善睡眠质量以避免痘痘的生成
干眼症五种类型分别是什么