提问人:Tornado547 提问时间:9/22/2023 更新时间:9/22/2023 访问量:45
Python ETree.find 找不到复杂路径
Python ETree.find not finding with complex path
问:
我有一个看起来像这样的 xml 元素
<PI Name="MonitoredVariable">
<Reference Object="SomeName" />
</PI>
<PI Name = "Other Properties" />
<PI Name = "Other Properties" />
<PI Name = "Other Properties" />
我想抓取引用元素
当我尝试用
ref = elem.find("./PI[@Name='MonitoredVariable']/Reference")
ref 最终为 None。
当我尝试用
if superref := elem.find("./PI[@Name='MonitoredVariable']"):
ref = superref.find('Reference')
ref 最终为正确的值。第二组代码更难理解,而且速度可能更慢,所以我更愿意弄清楚为什么第一组代码不起作用。
答:
0赞
Hermann12
9/22/2023
#1
你的问题不清楚,请编辑,你喜欢捕捉什么,你的根标签看起来如何?
import xml.etree.ElementTree as ET
xml_s = """<root><PI Name="MonitoredVariable">
<Reference Object="SomeName" />
</PI>
<PI Name = "Other Properties" />
<PI Name = "Other Properties" />
<PI Name = "Other Properties" /></root>"""
tree = ET.fromstring(xml_s)
ref = tree.find(".//PI/Reference[@Object]")
print(ref.attrib['Object'])
输出:
SomeName
评论
root.find("./PI[@Name='MonitoredVariable']/Reference")
PI
./PI[@Name='MonitoredVariable']/Reference