2015-04-01 77 views
-1

有什麼方法可以獲取XML標籤的特定值嗎?如何獲取特定的XML標記值?

<Country Rank="0"> 
    <Name>xyz</Name> 
    <Place>abcd</IntValue> 
</Country> 
<Country Rank="1"> 
    <Name>xyz1</Name> 
    <Place>abcd1</IntValue> 
</Country> 
<Country Rank="2"> 
    <Name>xyz2</Name> 
    <Place>abcd2</IntValue> 
</Country> 

我該如何獲得特定等級國家的位置?

下面的代碼將生成所有XML標記的文本。但我需要遍歷特定的xpath。

from xml.etree import ElementTree 

with open('file.xml', 'rt') as f: 
    tree = ElementTree.parse(f) 

for node in tree.iter(): 
    print node.tag 
    print node.text 
+1

我已刪除了明確的題外話你的問題的一部分。其餘部分看起來很像代碼請求 - 這不是代碼寫入服務。請展示一個[minimal example](http://stackoverflow.com/help/mcve)你嘗試實現這一點,並精確地描述它的問題。 – jonrsharpe 2015-04-01 09:26:46

+0

@ jonrsharpe:用最小的例子編輯。請幫助我。 – 2015-04-01 09:41:49

+0

*「...並精確地描述它的問題」*。 – jonrsharpe 2015-04-01 09:49:43

回答

1

使用XPaths

[place.text for country in e.findall(".//Country[@Rank='1']") for place in country.iter("Place")] 

哪裏e是你的樹或元素的根。在XPath ".//Country[@Rank='1']"秩值可以用來改變期望的等級,這樣就可以使一個功能,如:

def get_places_by_rank(e, rank): 
    xpath = ".//Country[@Rank='{}']".format(rank) 
    return [place.text for country in e.findall(xpath) for place in country.iter("Place")] 

而且使用它像:

>>> e=ET.fromstring(""" 
... <Countries> 
...  <Country Rank="0"> 
...   <Name>xyz</Name> 
...   <Place>abcd</Place> 
...  </Country> 
...  <Country Rank="1"> 
...   <Name>xyz1</Name> 
...   <Place>abcd1</Place> 
...  </Country> 
...  <Country Rank="2"> 
...   <Name>xyz2</Name> 
...   <Place>abcd2</Place> 
...  </Country> 
... </Countries>""") 
>>> 
>>> get_places_by_rank(e, 1) 
['abcd1'] 
>>> get_places_by_rank(e, 2) 
['abcd2'] 
>>> get_places_by_rank(e, 3) 
[] 
>>> get_places_by_rank(e, 0) 
['abcd']