Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使用lxml从父级具有给定值的子级获取值_Loops_Lxml - Fatal编程技术网

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

Loops 使用lxml从父级具有给定值的子级获取值,loops,lxml,Loops,Lxml,我对将lxml与python结合使用还不熟悉,但我在以我想要的方式解析xml文件和xml文件时遇到了困难。我四处寻找,似乎找不到任何能很好解释这一点的东西。我需要做的是用一个固定值迭代父元素下面的子元素 例如:我需要遍历name变量下的所有元素,但仅限于id=VTBRA的桩号下的元素 <station id="VTBRA" name="RT 7 Brandon" elev="407" lat="43.76728" lon="-73.05017" distance="" provider="

我对将lxml与python结合使用还不熟悉,但我在以我想要的方式解析xml文件和xml文件时遇到了困难。我四处寻找,似乎找不到任何能很好解释这一点的东西。我需要做的是用一个固定值迭代父元素下面的子元素

例如:我需要遍历name变量下的所有元素,但仅限于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"/>
此代码循环遍历id为VTBRA的站内外的所有变量实例。是否可以添加一个参数或其他内容,以使迭代器仅循环通过所选站点id下的变量标记?或者我应该是一个完全不同的函数

非常感谢您的帮助! 谢谢

您可以使用xpath函数选择id为VTBRA的元素并遍历其所有元素,如:

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数据后会产生:

python3 script.py xmlfile
T
RH
FF
DD
DDCARD
FFGUST
VV
STAQUAL