【问题标题】:Case Insensitive XML parsing in Python Element TreePython 元素树中不区分大小写的 XML 解析
【发布时间】:2016-01-04 09:15:47
【问题描述】:

我需要使用元素树库中的 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?

【问题讨论】:

    标签: xml python-2.7 xml-parsing elementtree


    【解决方案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?

    【讨论】:

    • uuid 混合了大小写。是否可以在元素树中做到这一点?
    • @Venkatesh 请参阅 更新 部分,了解如何使用 ElementTree 执行此操作
    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 2013-05-24
    • 2011-10-16
    • 1970-01-01
    • 2010-10-26
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多