我是不熟悉将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"/>
我目前正在修改这样的代码片段:
对于node.getiterator('station')中的elt:provider = elt.get('provider','Unknown')
for elt in node.getiterator('variable'):
if elt.get('var', 'Unknown') == "T":
print elt.get('value','Unknown')
此代码在工作站内部和外部的id为“ VTBRA”的“变量”的所有实例之间循环。是否有一个参数或可以添加的东西来使迭代器仅循环遍历所选站号下方的变量标签?还是我应该完全是一个不同的职能?
任何帮助深表感谢!谢谢!
您可以使用xpath()
函数选择as<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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句