xml.etree.ElementTree 未找到 XML 中的所有元素
xml.etree.ElementTree not finding all Elements in 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>
我无法找到 'message' 之后的任何子元素:
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)
- 元素'url'
- 元素'refcode'
- 元素'status'
- 元素'message'
我正在尝试检索 pcr 元素下的所有信息(即 eCase01m、eProcedures03、eMedications03)。
您可以通过两种方式使用 findall()
。不幸的是,这在两个 different parts of the docs:
中被提及
Element.findall() finds only elements with a tag which are direct
children of the current element.
...
Finds all matching subelements, by tag name or path. Returns a list
containing all matching elements in document order.
这意味着如果您查找标签,您只会搜索当前元素的 直接 子元素。
您可以改用 XPath 来查找您感兴趣的部分,这将通过文档递归查找匹配项。应执行以下任一操作:
root.findall('./message/pcrs/pcr') # Find them relative to this node
root.findall('.//pcr') # Find them anywhere below the current node
为了完整起见,让我补充一下,您也可以尝试 xpath:
for i in tree.xpath('*//pcr/*'):
print(i.tag)
输出:
eCase01m
eProcedures03
eMedications03
我有以下 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>
我无法找到 'message' 之后的任何子元素:
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)
- 元素'url'
- 元素'refcode'
- 元素'status'
- 元素'message'
我正在尝试检索 pcr 元素下的所有信息(即 eCase01m、eProcedures03、eMedications03)。
您可以通过两种方式使用 findall()
。不幸的是,这在两个 different parts of the docs:
Element.findall() finds only elements with a tag which are direct children of the current element.
...
Finds all matching subelements, by tag name or path. Returns a list containing all matching elements in document order.
这意味着如果您查找标签,您只会搜索当前元素的 直接 子元素。
您可以改用 XPath 来查找您感兴趣的部分,这将通过文档递归查找匹配项。应执行以下任一操作:
root.findall('./message/pcrs/pcr') # Find them relative to this node
root.findall('.//pcr') # Find them anywhere below the current node
为了完整起见,让我补充一下,您也可以尝试 xpath:
for i in tree.xpath('*//pcr/*'):
print(i.tag)
输出:
eCase01m
eProcedures03
eMedications03