3

我有一个重复出现的 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. 因此,从上面的示例中,我只想为=“reason1”显示cmnt_txt一次“ABC ”。cmnt_reas_typ但问题是cmnt_reas_typ一个动态值,我不能在 XPath 中对其进行硬编码。有没有办法说只cmnt_txt为此返回一个cmnt_reas_typ?或者即使 XPath 返回一个布尔值true,如果它是第二次出现,那cmnt_reas_typ也应该没问题。它适用于 XPATH 1.0。

4

3 回答 3

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)

您将获得唯一结果列表并在屏幕上一一显示。

于 2012-11-14T16:31:27.230 回答
0

此 xpath 将仅返回在 XPATH 1.0comment中具有唯一cmnt_txt元素的元素cmnt_reas_type

comment[not(. = preceding::comment)]
于 2012-11-14T17:39:28.013 回答
0

如果我正确理解您的需求,您希望每种评论类型都产生一个评论文本(第一个),对吗?如果是这样的话,那么我想出了这个 XPath:

//cmnt_txt[not(../cmnt_reas_typ/text() = ../preceding::cmnt_reas_typ/text())]

它需要所有不等于任何前面cmnt_text的节点。因此,如果我没有遗漏任何东西,它应该只取每种类型的第一个。cmnt_reas_typcmnt_reas_typcmnt_text

于 2012-11-14T17:51:56.270 回答