2016-01-04 66 views
0

我需要使用元素樹lib中的findall函數解析並從XML中獲取給定屬性的特定屬性。 例如,Python元素樹中不區分大小寫的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> 

我們使用下面的查詢,以獲得「sys_id」和「路徑」屬性從XML中給定的UUID,但在某些情況下,我們所提供的不同的情況下,「el8976-hf056」 UUID代替'EL8976-hF056'。在這種情況下,我們無法獲取該uuid的路徑和sys_id。

Elms = root.findall(".//Mapping/Map[@uuid='%s']" % "el8976-hf056") 

我們怎樣才能用正確的情況下的確切路徑和sys_id?

回答

1

如果你的XML值始終處於上層的情況下,你可以轉換提供uuid爲大寫第一:

Elms = root.findall(".//Mapping/Map[@uuid='%s']" % "el8976-hf056".upper()) 

或使用lxml庫,如果你真的需要fiter屬性值在不區分大小寫的方式,因爲顯示在下面的線程:Is it possible for lxml to work in a case-insensitive manner?

更新:

使用ElementTree你會甲腎上腺素ED實現在python不區分大小寫的檢查邏輯:

  1. 遍歷root.findall(".//Mapping/Map")
  2. for循環體內部,檢查相應的uuid屬性值不區分大小寫並採取相應措施。供參考:How do I do a case insensitive string comparison in Python?
+0

uuid是混合的大小寫。元素樹中可以這樣做嗎? – Venkatesh

+0

@Venkatesh參見** update **部分,瞭解如何使用'ElementTree' – har07