我有一个配置文件,其中包含多个交易插件。以下是事务插件的示例。对于配置文件中可能存在的所有内容,交易插件的结构相同。我如何能够查询名为" 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