python - xml.etree.ElementTree 未在 XML 中找到所有元素
问题描述
我有以下 XML 文件,我正在尝试使用 xml.etree 进行迭代:
<safetypadapiresponse><url></url><refcode /><status>SUCCESS</status><message><pcrs>
<pcr>
<eCase01m>1234</eCase01m>
<eProcedures03>12 Lead ECG Obtained</eProcedures03>
<eMedications03>Oxygen</eMedications03>
</pcr>
</pcrs></message></safetypadapiresponse>
在“消息”之后,我无法找到任何子元素,其中包含以下内容:
import xml.etree.ElementTree as ET
tree = ET.parse(xmlFile)
root = tree.getroot()
for member in root.findall('pcr'):
print(member)
运行以下命令时会列出以下子元素:
for member in root:
print(member)
- 元素“网址”
- 元素'refcode'
- 元素“状态”
- 元素“消息”
我正在尝试检索 pcr 元素下的所有信息(即 eCase01m、eProcedures03、eMedications03)。
解决方案
您可以通过findall()
两种方式使用。文档的两个不同部分都提到了这一点,这是毫无帮助的:
Element.findall() 仅查找带有标签且是当前元素的直接子元素的元素。
...
按标签名称或路径查找所有匹配的子元素。返回包含文档顺序中所有匹配元素的列表。
这意味着如果你寻找一个标签,你只是在搜索当前元素的直接子元素。
您可以改用 XPath 来查找您感兴趣的部分,这将通过文档递归查找匹配项。以下任何一项都应该这样做:
root.findall('./message/pcrs/pcr') # Find them relative to this node
root.findall('.//pcr') # Find them anywhere below the current node
推荐阅读
- c++ - 表达式包含无效的整理元素名称 c++ 正则表达式
- unity3d - Unity 2D对象面方向其移动
- python - 我需要使用 python 和 pandas 将 CSV 文件转换为 Json 文件
- anychart - 到达系列开始/结束的事件?
- javascript - 如何将对象数组中的某些属性合并到另一个数组中?
- ios - 到达 UICollectionView 的末尾时无法开始分页。UIscrollView 内的水平 UICollectionView 位于 UIPageViewController 内
- ubuntu-16.04 - openvpn ubuntu 16.04 vpn manager不断重新连接密码过期
- machine-learning - 将 k-means 聚类结果与层次聚类进行比较
- python - 尝试使用 Google Cloud Scheduler 运行 Python 可执行文件
- android - 执行自定义 DialogPreference 时遇到问题