如何使用 XPATH 从 XML 中解析和获取准确的结果
Posted
技术标签:
【中文标题】如何使用 XPATH 从 XML 中解析和获取准确的结果【英文标题】:How to parse and fetch exact result from XML using XPATH 【发布时间】:2016-03-03 11:11:51 【问题描述】:使用以下 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="and" value="hij" />
<task name="task4" operation="or" value="klm" />
<task name="task5" operation="and" 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="and" 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>
我想得到条件 name="task1", value="abc" AND name="task2", value="efg" AND name="task5", value="nop" 的 ID=XYZ-987
我得到 2 个结果(ABC-123 和 XYZ-987)而不是 1 个(XYZ-987)。 使用以下 XPATH 表达式
/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']]/id
如何根据输入条件大小过滤这 2 个结果,并获得具有上述 3 个条件的条目?
请参考XPATH executing complex queries 开发表达式。
【问题讨论】:
【参考方案1】:通过在表达式中附加 " and count(condition/task)=3" 得到答案。
/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
【讨论】:
你的意思是and count(condition/task)=3
吗?
是的,添加计数我得到了结果
我的意思是发布的 XML 中没有 event
元素,但突然你的答案中有 count(condition/event)
。这可能会让未来的访问者感到困惑,您是认真的还是错字?以上是关于如何使用 XPATH 从 XML 中解析和获取准确的结果的主要内容,如果未能解决你的问题,请参考以下文章