我有一个重复出现的XML元素
<comment>
<cmnt_reas_typ>reason1</cmnt_reas_typ>
<cmnt_txt>ABC</cmnt_txt>
</comment>
<comment>
<cmnt_reas_typ>reason1</cmnt_reas_typ>
<cmnt_txt>ABC</cmnt_txt>
</comment>
<comment>
<cmnt_reas_typ>reason2</cmnt_reas_typ>
<cmnt_txt>ABC</cmnt_txt>
</comment>
基本上,我只想为特定cmnt_txt
显示cmnt_reas_typ
一次。所以从上面的示例我想只为cmnt_txt
=“reason1”显示cmnt_reas_typ
“ABC”一次。但问题是cmnt_reas_typ
是一个动态值,我无法在XPath中对其进行硬编码。有没有办法说这个cmnt_txt
只返回一个cmnt_reas_typ
?或者即使XPath返回布尔值true
,如果它是cmnt_reas_typ
的第二次出现也应该没问题。它适用于XPATH 1.0。
答案 0 :(得分:0)
在XPATH 2.0上,您可以使用distinct-values()
您预期的XPATH应该是
distinct-values(//comment[cmnt_reas_typ='PASS-YOUR-DYNAMIC-VALUE']/cmnt_txt)
distinct-values(//comment[cmnt_reas_typ='reason1']/cmnt_txt)
您将获得独特结果列表,并在屏幕上逐一显示。
答案 1 :(得分:0)
此xpath将仅返回comment
个元素,这些元素在XPATH 1.0中为每个cmnt_txt
都有唯一的cmnt_reas_type
元素
comment[not(. = preceding::comment)]
答案 2 :(得分:0)
如果我理解你的需要,你希望每个评论类型都能产生一个评论文本(第一个),对吗?如果是这样,那么我想出了这个XPath:
//cmnt_txt[not(../cmnt_reas_typ/text() = ../preceding::cmnt_reas_typ/text())]
所有cmnt_text
节点的cmnt_reas_typ
不等于任何前面的cmnt_reas_typ
。因此,如果没有我错过的任何内容,它应该只采用每种类型的第一个cmnt_text
。