python - 使用 elementtree 根据孙子标签查找元素
问题描述
我对 xml 解析完全陌生。我有数千个 xml,我想找出所有元素DE,只有当我有国家标签时
这是我的示例 xml
<?xml version="1.0" encoding="UTF-8"?>
<DE>
<CT>
<IG>
<FS id="01">
<FE id="A" fId="B">
<title>Apple</title>
</FE>
</FS>
<country syse="21" subSys="2">
<FF FR="101" fe="01" />
<referTo refType="t06">
<CF Code="350" />
</referTo>
<place id="00A" placeValue="00AB">
<Q>001</Q>
<TQ>0001</TQ>
<PR Value="A" CodeValue="C" />
</place>
<place id="00E" placeValue="00EF">
<Q>001</Q>
<TQ>0001</TQ>
<PR Value="03" AValue="957" />
<Books>
<IA>
<Part />
</IA>
<PRGroup>
<country Code="5">
<PR Value="02" AValue="345" />
<constrain>Double condition.</constrain>
<constrain>Double condition.</constrain>
</country>
</PRGroup>
</Books>
</place>
</country>
</IG>
</CT>
</DE>
import xml.etree.ElementTree as ET
tree = ET.parse(content)
root = tree.getroot()
Num = root.findall("//DE[//place/Books/PRGroup/country]")
当我尝试不同的方式但无法解决这个问题时,我得到了谓词错误或绝对路径错误。
我如何检索结果并基于此访问属性,请您帮助我。
解决方案
使用 lxml 它应该是这样的:
from lxml import etree
content = """[your xml above]"""
root = etree.fromstring(content.encode())
Num = root.xpath("//DE[//place/Books/PRGroup/country]")
推荐阅读
- javascript - 为什么 JSLint 会警告我我的 switch-case 语句格式不正确?
- varnish-vcl - 如何在 VCL 4.0 中重现 VCL 3.0 vcl_recv / restart 的行为
- rcpp - RcppArmadillo:对角矩阵乘法很慢
- python - 使用 python 可视化神经网络
- algorithm - 检测体素或体素组是否仍连接到对象的其余部分
- python - 为什么熊猫需要重塑我的布尔索引,我该如何修复它以避免警告?
- python - 需要帮助解决我的班级的一些代码问题
- bioinformatics - 在 fastq 文件中过滤具有超过 8 个相同连续核苷酸的序列?
- java - 使用 Java 8 在数组/列表中收集文件名
- python - 如何在嵌套列表的每个子列表中指定特定元素的索引?