我需要使用Element Tree lib中的findall函数解析并从XML获取给定属性的特定属性。 例如,
<Mapping>
<Map name="map1" sys_id="QAE567-hKLO890" path="\\sys1\map1\" uuid="EL8976-hF056" />
<Map name="map2" sys_id="RTY897-RT643DF" path="\\sys2\map2\" uuid="Jkl56W-yKP87" />
...
...
...
</Mapping>
我们使用以下查询从xml获取给定uuid的'sys_id'和'path'属性,但在某些情况下,我们为uuid提供了不同的案例'el8976-hf056'而不是'EL8976-hF056'。在这种情况下,我们无法获得该uuid的路径和sys_id。
Elms = root.findall(".//Mapping/Map[@uuid='%s']" % "el8976-hf056")
我们如何通过正确的案例获得确切的路径和sys_id?
答案 0 :(得分:1)
如果XML中的值始终为大写,您可以先将提供的uuid
转换为大写:
Elms = root.findall(".//Mapping/Map[@uuid='%s']" % "el8976-hf056".upper())
或使用lxml
库,如果您确实需要以不区分大小写的方式拟合属性值,如以下主题所示:Is it possible for lxml to work in a case-insensitive manner?
更新:
使用ElementTree
,你需要在python中实现不区分大小写的检查逻辑:
root.findall(".//Mapping/Map")
for
循环体内,检查相应的uuid
属性值不区分大小写并相应地采取措施。供参考:How do I do a case insensitive string comparison in Python?