我是使用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下面的变量标签?或者我应该完全不同的功能?
非常感谢任何帮助! 谢谢!
答案 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