我正在考虑如何使用XQuery来检查XML文件中是否存在特定模式。
示例: 想象一下代表流程的(简化)XML(StartEvent> UserTask> AutoTask> EndEvent)。
<process>
<startEvent id="start1">
<outgoing>flow1</outgoing>
</startEvent>
<userTask id="user1">
<incoming>flow1</incoming>
<outgoing>flow2</outgoing>
</userTask>
<autoTask id="auto1">
<incoming>flow2</incoming>
<outgoing>flow3</outgoing>
</autoTask>
<endEvent id="end1">
<incoming>flow3</incoming>
</endEvent>
<flow id="flow1" source="start1" target="user1"/>
<flow id="flow2" source="user1" target="auto1"/>
<flow id="flow3" source="auto1" target="end1"/>
</process>
现在我想检查文件中的某个地方是否为“userTask”类型的元素,紧接着是“autoTask”类型的元素。请注意,需要通过传入/传出流定义来检查此序列,而不能从文档中的顺序派生。
有没有办法用xquery / xpath做到这一点?
提前感谢您的想法!
答案 0 :(得分:1)
以下XPath 1.0查询列出了源为用户任务且目标为自动任务的所有流:
//flow[@source=//userTask/@id and @target=//autoTask/@id]
或者,没有后代:
/process/flow[@source=/process/userTask/@id and @target=/process/autoTask/@id]
或者,由于XML中的信息是多余的,您可以反过来询问。
//userTask[outgoing=//autoTask/incoming]
它列出了某些自动任务的传出流量传入的所有用户任务(同样,您可以将//
替换为/process/
。