2014-02-16 44 views
1

我是使用lxml和python的新手,並且我無法按照我的方式解析和xml文件。我已經四處搜尋,似乎無法找到任何解釋得很好的東西。我需要做的是迭代雖然具有固定值的父級下的子元素。使用lxml從具有給定值的父項的子項獲取值

例如:我需要遍歷名稱「變量」下的所有元素,但僅在id =「VTBRA」的站點下方。

<station id="VTBRA" name="RT 7 Brandon" elev="407" lat="43.76728" lon="-73.05017" distance="" provider="VTRANS"> 

<ob time="16 Feb 7:30 am EST"> 
<variable var="T" description="Temp" unit="F" value="9"/> 
<variable var="RH" description="Relh" unit="%" value="81"/> 
<variable var="FF" description="Wind" unit="mph" value="1"/> 
<variable var="DD" description="Direction" unit="deg" value="85"/> 
<variable var="DDCARD" description="Wind Card" unit="direction" value="E"/> 
<variable var="FFGUST" description="Gust" unit="mph" value="4"/> 
<variable var="VV" description="Visibility" unit="miles" value="3.68"/> 
<variable var="STAQUAL" description="Station Quality" unit="" value="OK"/> 

我目前修改代碼片段是這樣的:

在node.getiterator( '站')ELT: 提供商= elt.get( '提供商','未知「)

for elt in node.getiterator('variable'): 
     if elt.get('var', 'Unknown') == "T": 
      print elt.get('value','Unknown') 

此代碼遍歷‘可變的’內部和與‘VTBRA’的id站以外的所有實例。有沒有一個參數或者可以添加的東西來讓迭代器只循環選定站點ID下面的變量標籤?或者我應該完全是一個不同的功能?

任何幫助非常感謝! 謝謝!

回答

0

可以使用xpath()功能選擇與VTBRA<station>元素id並遍歷所有<variable>元素,如:

from lxml import etree 
import sys 

tree = etree.parse(sys.argv[1]) 
for v in tree.xpath('//station[@id="VTBRA"]//variable'): 
    ## Do whatever you want with each "variable" element. In this case I print its 
    ## "var" attribute. 
    print(v.get('var')) 

運行它想:

python3 script.py xmlfile 

國債收益率(後修復您的非格式xml數據):

T 
RH 
FF 
DD 
DDCARD 
FFGUST 
VV 
STAQUAL 
相關問題