Python元素树中不区分大小写的XML解析

时间:2016-01-04 09:15:48

标签: xml python-2.7 xml-parsing elementtree

我需要使用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?

1 个答案:

答案 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中实现不区分大小写的检查逻辑:

  1. 循环浏览root.findall(".//Mapping/Map")
  2. for循环体内,检查相应的uuid属性值不区分大小写并相应地采取措施。供参考:How do I do a case insensitive string comparison in Python?