使用 minidom 查找具有特定子节点的 XML 节点
Find a XML node with a specific child using minidom
我正在寻找一种方法来过滤此 XML 字符串并打印 "identifiant" 值,其中 "source" 字段是 HAL。
<sudoc service="idref2source">
<query>
<ppn>115565329</ppn>
<result>
<source>HAL</source>
<identifiant>chl</identifiant>
</result>
</query>
<query>
<ppn>115565329</ppn>
<result>
<source>VIAF</source>
<identifiant>http://viaf.org/viaf/202196105</identifiant>
</result>
</query>
</sudoc>
我只使用 minidom 解析了字符串
dom = parseString(r.content)
非常感谢!
以下 - 1 行代码
import xml.etree.ElementTree as ET
xml = '''
<sudoc service="idref2source">
<query>
<ppn>115565329</ppn>
<result>
<source>HAL</source>
<identifiant>chl</identifiant>
</result>
</query>
<query>
<ppn>115565329</ppn>
<result>
<source>VIAF</source>
<identifiant>http://viaf.org/viaf/202196105</identifiant>
</result>
</query>
</sudoc>
'''
root = ET.fromstring(xml)
hals = [s.find('identifiant').text for s in root.findall('.//result/[source="HAL"]')]
print(hals)
Python 的 xml module is sufficient for this, in combination with xpath - 找到文本为“HAL”的元素 source
,ping 回 parent
元素并选择 identifiant
该父元素中的元素。请注意,我在这里使用 find
,而不是 findall
,因为您的问题专门针对共享 xml - 如果它是一个较大的文件,您可以 运行 使用 findall
:
import xml.etree.ElementTree as ET
xml = """[your data above here]"""
root = ET.fromstring(xml)
root.find(".//source[.='HAL']/..//identifiant").text
'chl'
我正在寻找一种方法来过滤此 XML 字符串并打印 "identifiant" 值,其中 "source" 字段是 HAL。
<sudoc service="idref2source">
<query>
<ppn>115565329</ppn>
<result>
<source>HAL</source>
<identifiant>chl</identifiant>
</result>
</query>
<query>
<ppn>115565329</ppn>
<result>
<source>VIAF</source>
<identifiant>http://viaf.org/viaf/202196105</identifiant>
</result>
</query>
</sudoc>
我只使用 minidom 解析了字符串
dom = parseString(r.content)
非常感谢!
以下 - 1 行代码
import xml.etree.ElementTree as ET
xml = '''
<sudoc service="idref2source">
<query>
<ppn>115565329</ppn>
<result>
<source>HAL</source>
<identifiant>chl</identifiant>
</result>
</query>
<query>
<ppn>115565329</ppn>
<result>
<source>VIAF</source>
<identifiant>http://viaf.org/viaf/202196105</identifiant>
</result>
</query>
</sudoc>
'''
root = ET.fromstring(xml)
hals = [s.find('identifiant').text for s in root.findall('.//result/[source="HAL"]')]
print(hals)
Python 的 xml module is sufficient for this, in combination with xpath - 找到文本为“HAL”的元素 source
,ping 回 parent
元素并选择 identifiant
该父元素中的元素。请注意,我在这里使用 find
,而不是 findall
,因为您的问题专门针对共享 xml - 如果它是一个较大的文件,您可以 运行 使用 findall
:
import xml.etree.ElementTree as ET
xml = """[your data above here]"""
root = ET.fromstring(xml)
root.find(".//source[.='HAL']/..//identifiant").text
'chl'