【发布时间】:2016-06-18 03:02:59
【问题描述】:
如何获取条件 name="task1", value="abc" AND name="task2", value="efg" name="task5", value="nop" 的 ID
预期输出:ABC-123; XYZ-987
实际输出:XYZ-987
查询:/node1/node2/node3[condition/task[@name='task1' and @value='abc'] and condition/task[@name='task2' and @value='efg'] and condition/task[@name='task5' and @value='nop'] and count(condition/task)=3]/id
查询引用自How to parse and fetch exact result from XML using XPATH
Catch 如果任务中的所有操作(除了满足的任务)都是“或”,那么该 ID 也应该被视为满足条件。在下面的 XML 中,ABC-123、LMN-543 和 XYZ-987 满足条件,但 ABC-123 具有所有其他操作 =“OR”。所以这也应该包含在结果中。通过使用计数,我限制为 3 个任务,因此不包括 ABC-123。使用 count>3 将获取 ABC-123、LMN-543 和 XYZ-9876。
需要输出为 ABC-123; XYZ-987 对操作使用条件检查=或
以下是使用的 XML
<node1>
<node2>
<node3>
<id>ABC-123</id>
<condition>
<task name="task1" operation="and" value="abc" />
<task name="task2" operation="and" value="efg" />
<task name="task3" operation="or" value="hij" />
<task name="task4" operation="or" value="klm" />
<task name="task5" operation="or" value="nop" />
<task name="task6" value="uvw" />
</condition>
</node3>
<node3>
<id>LMN-543</id>
<condition>
<task name="task1" operation="and" value="abc" />
<task name="task2" operation="and" value="efg" />
<task name="task3" operation="and" value="hij" />
<task name="task4" operation="or" value="klm" />
<task name="task5" operation="or" value="nop" />
<task name="task6" value="uvw" />
</condition>
</node3>
<node3>
<id>XYZ-987</id>
<condition>
<task name="task1" operation="and" value="abc" />
<task name="task2" operation="and" value="efg" />
<task name="task5" operation="or" value="nop" />
</condition>
</node3>
<node3>
<id>RST-567</id>
<condition>
<task name="task1" operation="and" value="abc" />
<task name="task2" operation="and" value="efg" />
<task name="task8" operation="and" value="jkl" />
<task name="task9" operation="and" value="rst" />
<task name="task10" value="xyz" />
</condition>
</node3>
<node3>
<id>PQR-345</id>
<condition>
<task name="task1" operation="and" value="ijk" />
<task name="task2" operation="and" value="klm" />
<task name="task8" operation="and" value="jkl" />
<task name="task9" operation="and" value="rst" />
</condition>
</node3>
</node2>
</node1>
【问题讨论】: