我有一个配置文件,里面配置了多个事务插件。以下是交易插件的示例。事务插件的结构对于配置文件中可能存在的所有内容都是相同的。如何查询名为“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>
答案 0 :(得分:2)
我没有在您的示例输入中看到plugins
元素,但假设它在那里并且您只是没有显示它,那么沿着这些行的XPath应该这样做:
/plugins/transaction[@code = '501110']/source[@name = 'mmc']/step
这将选择指定路径下的所有step
元素。
501110
周围的引号在这种特殊情况下并不是绝对必要的,因为code
是一个数字,但是如果它可能包含一个非数字字符,那么它是有意义的在此将其视为字符串值。
答案 1 :(得分:1)
尝试这样做:
/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