XPath 表达式,用于选择特定节点及其属性,该节点具有指定的多个属性



我有一个配置文件,其中包含多个交易插件。以下是事务插件的示例。对于配置文件中可能存在的所有内容,交易插件的结构相同。我如何能够查询名为" MMC"的源并获取所有步骤。" MMC"源也可能存在于另一种不同的交易配置中?

我写了

String expression = "/plugins/transaction[@code=501110]/source[@name=mmc]/step/@*";

但没有给我任何结果

<transaction code="501110" name="A transaction" plugin="com.Transaction.ATransaction">
    <source name="mmc">
        <step id="0">
            <result code="*">
                <destination>mms</destination>
            </result>
        </step>
        <step id="1">
            <result code="0000">
                <destination>brmc</destination>
            </result>
            <result code="0012">
                <destination>cre</destination>
            </result>
            <result code="default">
                <destination>nc</destination>
            </result>
        </step>
    </source>
    <source name="mms">
        <step id="1">
            <result code="0000">
                <destination>bnk</destination>
            </result>
            <result code="default">
                <destination>nc</destination>
            </result>
        </step>
    </source>
    <source name="bnk">
        <step id="1">
            <result code="0000">
                <destination>nc</destination>
            </result>
            <result code="default">
                <destination>nc</destination>
            </result>
        </step>
    </source>
</transaction>

我在您的示例输入中没有看到plugins元素,但是假设它在那里并且您只是没有显示,则沿着这些行XPATH应该这样做:

/plugins/transaction[@code = '501110']/source[@name = 'mmc']/step

这将选择指定路径下方的所有step元素。

在这种特殊情况下,围绕501110的引号并不是严格必要的,因为code是一个数字,但是在不合时宜的情况下,它可以包含一个非数字字符,因此在此处将其视为字符串值是有意义的。

尝试这样做:

/plugins/transaction[@code="501110"]/source[@name="mmc"]/step

如果您想要所有destination元素:

/plugins/transaction[@code="501110"]/source[@name="mmc"]/step/*[@name=contains(., "result code")]/destination/text()

如果您想要所有result code

/plugins/transaction[@code="501110"]/source[@name="mmc"]/step/*[@name=contains(., "result code")]/@code

相关内容

  • 没有找到相关文章

最新更新