我正在寻找一种过滤此XML字符串并在“源”字段为HAL的情况下打印“ identifiant”值的方法。
<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)
非常感谢!
答案 0 :(得分:0)
下面-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)
答案 1 :(得分:0)
Python的xml模块足以满足此要求,并与xpath结合使用-查找元素source
,其文本为“ HAL”,并回溯到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'