我的XML大致如下:
<Dispatch ID = "JJJJ">
<Log ID = "150504BCFSP00072">
<LogTime>"May 4 2015 5:48PM"</LogTime>
<LogType>"1125-KKKK"</LogType>
<LogDetails>
<details>
<DetailTime>"May 4 2015 5:48PM"</DetailTime>
<IncidentDetail>"[1] The Thing I Want"</IncidentDetail>
<DetailTime>"May 4 2015 5:49PM"</DetailTime>
<IncidentDetail>"[2] The Thing I Don't Want"</IncidentDetail>
</details>
</LogDetails>
</Log>
</Dispatch>
我想从Station ID为JJJJ的日志中提取所有IncidentDetail文本,&amp;其LogType包含“KKKK”,其IncidentDetail以[1]开头(使其成为可能很多的第一次更新)。到目前为止,我有这个XPATH查询:
//Dispatch[@ID='JJJJ']//Log/LogType[contains(.,'KKKK')]
这会给我一个事件列表,如下所示:
Element='<LogType>"1125-KKKK"</LogType>'
Element='<LogType>"1125-KKKK"</LogType>'
Element='<LogType>"1125-KKKK"</LogType>'
但这只会让我陷入困境。我现在如何向后退并获取与我正在寻找的每个LogType事件相同的IncidentDetail文本?有一些多步骤的过程吗?
任何帮助表示赞赏。
答案 0 :(得分:0)
尝试//Dispatch[@ID='JJJJ']//Log/LogType[contains(.,'KKKK')]//IncidentDetail
。
答案 1 :(得分:0)
您可以将其作为谓词放置在主轴上,而不是单步执行Log/LogType
:
//Dispatch[@ID='JJJJ'][Log/LogType[contains(.,'KKKK')]]
或其他方式:
//Dispatch[@ID='JJJJ' and Log/LogType[contains(.,'KKKK')]]
从这里开始,您可以轻松地继续使用主轴进入IncidentDetail
而无需向后移动:
/Log/LogDetails/details/IncidentDetail
关于更新:
您可以使用xpath索引添加过滤器以仅获取同一父级中的第一个IncindentDetail
:
/Log/LogDetails/details/IncidentDetail[1]
或按节点的文字内容进行过滤:
/Log/LogDetails/details/IncidentDetail[contains(.,'[1]')