如果有重复的元素,使用XPATH选择唯一的第一个元素。

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_reas_typ显示一次cmnt_txt。因此,从上面的示例中,我只想为cmnt_reas_typ =“reason1”显示cmnt_txt“ABC”一次。但问题是cmnt_reas_typ是一个动态值,我不能在XPath中硬编码它。是否有一种方法可以说仅针对此cmnt_reas_typ返回一个cmnt_txt?或者,即使XPath返回布尔值true,如果它是该cmnt_reas_typ的第二次出现,那也可以。这是针对XPATH 1.0的。

我不理解这个问题,"check if the for that is already displayed on the screen" 是什么意思?你想检查 cmnt_reas_typ 还是 cmnt_txt 中是否有重复的内容?你想选择哪一个元素?还是你需要一个 XPATH 来返回一个布尔值以供测试使用? - nine9ths
抱歉,我认为有些文本被删除了。基本上,我想仅针对特定的cmnt_reas_typ显示cmnt_txt一次。因此,从上面的示例中,我只想针对cmnt_reas_typ = reason1显示cmnt_txt“ABC”一次。但问题是cmnt_reas_typ是一个动态值,我无法在xpath中硬编码它。有没有办法说只返回一个cmnt_reas_typ的cmnt_txt?这是XPATH 1.0。 - Makster
请编辑帖子以添加缺失的文本。 - nine9ths
请指明XPATH 1.0或2.0。 - nine9ths
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)

您将获得独特结果列表,并逐一在屏幕上显示。


我认为一些文本被删除了!无论如何,在XML文档之后是下面的文本。我想使用一个XPATH来检查该cmnt_reas_typ的cmnt_txt是否已经显示在屏幕上。如果是,则返回false。我不能在xpath中硬编码cmnt_reas_typ的值,因为它可能会不断变化。任何帮助将不胜感激。谢谢。 - Makster

0

这个xpath将只返回在XPATH 1.0中每个cmnt_reas_type都有唯一的cmnt_txt元素的comment元素。

comment[not(. = preceding::comment)]

在XPath 1.0中,preceding::comment/concat(cmnt_reas_typ,cmnt_txt)是不正常的。您不能在位置步骤的位置调用函数。这是一个打字错误吗? - Petr Janeček

0

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

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

它获取所有cmnt_text节点,其cmnt_reas_typ不等于任何先前的cmnt_reas_typ。因此,如果没有我漏掉的内容,它应该只获取每种类型的第一个cmnt_text


假设在给定的“cmnt_reas_typ”中,“cmnt_txt”可能会有所不同,因此某些内容将通过此方法被删除。但是,OP没有指定这个细节。 - nine9ths
@nine9ths 哦,对了。我的理解是每种评论类型应该只打印一个(第一个)评论文本,就这样。但是从 OP 的描述中确实存在歧义。我会在我的答案中添加这些信息。 - Petr Janeček

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接