gpt4 book ai didi

python - 如何使用Python的ElementTree获取child的child

转载 作者:行者123 更新时间:2023-12-01 04:49:00 24 4
gpt4 key购买 nike

我正在构建一个与 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在“child的子级”中搜索。这是我到目前为止所得到的:

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

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

最佳答案

你最好使用 XPath search这里:

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

这将搜索 <var>直接在 <vars> 下方标记标签,其属性 name等于Python name 给出的值变量,然后检索该标记的文本值。

演示:

>>> 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()可能会更容易、更简洁。

关于python - 如何使用Python的ElementTree获取child的child,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28789029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com