Python解析含嵌入属性的XML:获取指定节点值的问题
用xml.etree.ElementTree提取特定属性的XML节点值
别担心,这种结构的XML完全可以用xml.etree.ElementTree搞定!你的需求是找到Ident为"RoutineReport"且Key为"SequenceNumber"的NGKNODE节点的Value属性值,下面是具体的实现步骤和代码:
步骤说明
- 导入
xml.etree.ElementTree模块(通常我们会简写为ET) - 解析你的XML内容(支持字符串或本地文件两种形式)
- 使用XPath表达式精准匹配同时满足
Ident和Key条件的NGKNODE节点 - 提取目标节点的
Value属性值
完整代码示例
import xml.etree.ElementTree as ET # 你的XML内容 xml_content = '''<?xml version="1.0" encoding="utf-8"?> <NGKCONFIG Report="ivory_2019-10-08_08h32m26s"> <NGKNODES Format="1" Version="3"> <NGKNODE Ident="Default" Key="DocLanguage" Value="en" /> <NGKNODE Ident="Default" Key="Machine" Value="Pane X234" /> <NGKNODE Ident="Default" Key="Look" Value="Mirr2012" /> <NGKNODE Ident="Default" Key="MachineGroup" Value="Mirr1743" /> <NGKNODE Ident="DailyReport" Key="Owner" Value="Milot" /> <NGKNODE Ident="RoutineReport" Key="Owner" Value="Milot" /> <NGKNODE Ident="BackupReport" Key="Owner" Value="Milot" /> <NGKNODE Ident="RoutineReport" Key="NextReportAt" Value="2020-06-26T00:00:00-04:00" /> <NGKNODE Ident="BackupReport" Key="NextReportAt" Value="2020-06-26T00:00:00-04:00" /> <NGKNODE Ident="BackupReport" Key="SequenceNumber" Value="105" /> <NGKNODE Ident="BackupReport" Key="LastReportAt" Value="2020-06-25T00:00:00-04:00" /> <NGKNODE Ident="RoutineReport" Key="SequenceNumber" Value="199" /> <NGKNODE Ident="RoutineReport" Key="LastReportAt" Value="2020-06-25T01:44:46-04:00" /> </NGKNODES> </NGKCONFIG>''' # 解析XML字符串 root = ET.fromstring(xml_content) # 使用XPath筛选符合条件的节点 target_node = root.find(".//NGKNODE[@Ident='RoutineReport' and @Key='SequenceNumber']") # 提取Value值(处理节点不存在的情况) if target_node is not None: sequence_number = target_node.get("Value") print(f"SequenceNumber的值是:{sequence_number}") else: print("未找到符合条件的节点")
代码解释
ET.fromstring(xml_content):将XML字符串解析为Element对象,方便后续操作- XPath表达式
.//NGKNODE[@Ident='RoutineReport' and @Key='SequenceNumber']:.//表示从当前节点(root)开始递归查找所有子节点NGKNODE指定要查找的节点名称[@Ident='RoutineReport' and @Key='SequenceNumber']是属性筛选条件,要求同时满足Ident和Key的匹配值
target_node.get("Value"):获取节点的Value属性值
如果你的XML是存储在文件中,只需要把ET.fromstring(xml_content)换成tree = ET.parse("your_xml_file.xml"),然后root = tree.getroot()即可。
内容的提问来源于stack exchange,提问作者Mario R
相关产品推荐
相关产品推荐

