如何在Python中使用XPath选择兄弟的子节点?

时间:2018-05-30 12:49:10

标签: python xml xpath

我正在使用Pythonlxml。我的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,但它只返回空值/空格。

如何获得我需要的价值?

1 个答案:

答案 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