我正在使用Python
和lxml
。我的xml文件:
<Example>
<Path>
<Some.Node>
// ...
</Some.Node>
<Some.Node>
<Known.Node KnownAttribute="123"/>
<Some.Stuff>
<Nothing.Important>Bla</Nothing.Important>
</Some.Stuff>
<Relevant.Node>
<Property>
<Name>Some</Name>
<Value>True</Value>
</Property>
<Property>
<Name>Known.Name</Name>
<Value>Desired Value</Value>
</Property>
<Property>
<Name>Some.Other</Name>
<Value>Yes</Value>
</Property>
// ...
</Relevant.Node>
// ...
</Some.Node>
<Some.Node>
// ...
</Some.Node>
</Path>
</Example>
有多个<Some.Node>
个节点,我只对KnownAttribute
等于123
的节点感兴趣。这部分我得到了:
query = "//Known.Node[@KnownAttribute='%s']" % attribute_value
但是,我需要获得<Relevant.Node>/<Property>/<Value>
<Name>
的值为Known.Name
的值。
这是我最好的尝试,但它不起作用:
root = etree.parse(xml_file).getroot()
query = "//Known.Node[@KnownAttribute='%s']/..//Property[Name='Known.Name']/Value" % attribute_value
result = root.xpath(query)
print(result[0].text)
它应该打印Desired Value
,但它只返回空值/空格。
如何获得我需要的价值?
答案 0 :(得分:1)
你真的很亲密。您可以在xpath表达式中询问节点的文本。
query = "//Known.Node[@KnownAttribute='%s']/..//" % attribute_value
query += "Property[Name='Known.Name']/Value/text()"
result = root.xpath(query)
print(result[0])
# prints:
Desired Value