如何使用Python的ElementTree获取孩子的孩子

斯科霍斯科

我正在构建一个与PLC通信的Python文件。编译时,PLC将创建一个XML文件,该文件提供有关程序的重要信息。XML看起来更像这样:

<visu>
    <time>12:34</time>
    <name>my_visu</name>
    <language>english</language>
    <vars>
        <var name="input1">2</var>
        <var name="input2">45.6</var>
        <var name="input3">"hello"</var>
    </vars>
</visu>

重要部分位于子“ vars”下。我想使用Python创建一个文件,该文件在发送参数“ input2”时将显示“ 45.6”。

到目前为止,我可以阅读“ visu”的所有子项,但不知道如何实际告诉Python在“子项”中进行搜索。这是到目前为止我得到的:

tree = ET.parse("file.xml")
root = tree.getroot()
for child in root:
    if child.tag == "vars":
        .......
        if ( "childchild".attrib.get("name") == "input2" ):
            print "childchild".text

有什么想法可以完成脚本吗?(或者也许是更有效的编程方式?)

马丁·彼得斯(Martijn Pieters)

您最好在这里使用XPath搜索

name = 'input2'
value = root.find('.//vars/var[@name="{}"]'.format(name)).text

这将在<var>标签的正下方搜索<vars>标签,该标签的属性name等于Pythonname变量给定的值,然后检索该标签的文本值。

演示:

>>> from xml.etree import ElementTree as ET
>>> sample = '''\
... <visu>
...     <time>12:34</time>
...     <name>my_visu</name>
...     <language>english</language>
...     <vars>
...         <var name="input1">2</var>
...         <var name="input2">45.6</var>
...         <var name="input3">"hello"</var>
...     </vars>
... </visu>
... '''
>>> root = ET.fromstring(sample)
>>> name = 'input2'
>>> root.find('.//vars/var[@name="{}"]'.format(name)).text
'45.6'

您可以通过困难的方式执行此操作,并手动遍历所有元素。每个元素都可以直接循环:

name = 'input2'
for elem in root:
    if elem.tag == 'vars':
        for var in elem:
           if var.attrib.get('name') == name:
               print var.text

但使用element.find()element.find_all()可能会更容易,更简洁。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过孩子的孩子获取firebase数据

来自分类Dev

使用 Swift 在 Firebase 中获取孩子的孩子

来自分类Dev

如何获取孩子的数据JavaScript

来自分类Dev

使用指针获取父母的孩子

来自分类Dev

使用nextUntil获取直系孩子

来自分类Dev

使用指针获取父母的孩子

来自分类Dev

AS3:如何访问孩子的孩子的孩子?

来自分类Dev

python ElementTree有一个孩子的元素的文本

来自分类Dev

如何获取此元素而非孩子的文字

来自分类Dev

如何从位置获取父母和孩子的ID

来自分类Dev

如何从ERB的YAML节点获取孩子

来自分类Dev

如何在 Firebase 中获取孩子的数据

来自分类Dev

使用Java API获取孩子的父母ID

来自分类Dev

使用PyQt从孩子那里获取数据

来自分类Dev

我如何让所有孩子(即孩子的孩子)都使用Javascript?

来自分类Dev

如何使用.hasChild并使用Firebase检索孩子?

来自分类Dev

如何使用.hasChild并使用Firebase检索孩子?

来自分类Dev

从孩子和孩子的孩子获取信息,如果列为空

来自分类Dev

ReactJs。获取孩子组件

来自分类Dev

AngularFire获取孩子的数据

来自分类Dev

从孩子那里获取变量

来自分类Dev

获取孩子ID onclick

来自分类Dev

获取孩子的家长记录

来自分类Dev

我如何使用班级的父母和孩子?

来自分类Dev

如何使用jQuery使孩子成为父母的父母?

来自分类Dev

使用多个孩子在 python 中解析 XML

来自分类Dev

ElementTree:查找没有元素的孩子

来自分类Dev

如何在JQuery中使用指定元素获取第一个孩子?

来自分类Dev

如何使用类获取元素的第四个孩子的输入?