使用lxml从父级具有给定值的子级获取值

时间:2014-02-16 13:22:23

标签: loops lxml

我是使用lxml和python的新手,我在解析和xml文件方面遇到了问题。我四处搜寻,似乎无法找到任何可以解释这一点的东西。我需要做的是迭代父元素下面具有固定值的子元素。

例如:我需要遍历名称为“variable”的所有元素,但只能在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"/>

我目前正在修改这样的代码snippit:

表示node.getiterator中的elt('station'):     提供商= elt.get( '提供商', '未知')

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

此代码循环遍历站内外的所有“变量”实例,其ID为“VTBRA”。是否有一个参数或某些东西可以添加到迭代器只循环选定的工作站ID下面的变量标签?或者我应该完全不同的功能?

非常感谢任何帮助! 谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用xpath()功能选择<station>元素VTBRA作为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