我正在尝试在分组后做一个明显的并且它不起作用。 使用此节点:
<MAIN>
<VALUE>A</VALUE>
<VALUE>B</VALUE>
<VALUE>AB</VALUE>
<VALUE>A</VALUE>
<VALUE>AB</VALUE>
</MAIN>
我可以使用以下xpath:
MAIN/VALUE[not(following::VALUE/text() = text())]
我有不同的值B,AB,A但是如果我有以下节点:
<MAIN>
<BLOC>
<TYP>1</TYP>
<VALUE>A</VALUE>
</BLOC>
<BLOC>
<TYP>1</TYP>
<VALUE>BA</VALUE>
</BLOC>
<BLOC>
<TYP>1</TYP>
<VALUE>B</VALUE>
</BLOC>
<BLOC>
<TYP>1</TYP>
<VALUE>A</VALUE>
</BLOC>
<BLOC>
<TYP>2</TYP>
<VALUE>A</VALUE>
</BLOC>
<BLOC>
<TYP>2</TYP>
<VALUE>C</VALUE>
</BLOC>
</MAIN>
我在尝试使用TYP进行分组之前:
MAIN/BLOC[TYP=1]/VALUE[not(following::VALUE/text() = text())]
它不起作用,我有BA和B但没有A.
如果我尝试:
MAIN/BLOC[TYP=1]/VALUE
该组返回我的TYP的所有值。
为什么分组后分离不起作用?
答案 0 :(得分:1)
您还需要检查以下节点上的TYP=1
。目前,第二个“A”没有被选中,因为它的下一个节点也是“A”
MAIN/BLOC[TYP=1]/VALUE[not(following::BLOC[TYP=1]/VALUE/text() = text())]
我注意到你已经标记了这个XSLT,并在标题中提到了XSLT。在这种情况下,您应该使用名为Muenchian Grouping的技术来获取不同的项目。
首先,定义一个像这样的键
<xsl:key name="blocs_by_value" match="BLOC" use="VALUE" />
然后,要获得不同的VALUE节点,请执行此操作
<xsl:value-of select="MAIN/BLOC[generate-id() = generate-id(key('blocs_by_value', VALUE)[1])]/VALUE" />
对于您希望为特定类型获取不同VALUE节点的情况,请像这样定义键
<xsl:key name="blocs_by_typ_value" match="BLOC" use="concat(TYP, '|', VALUE)" />
然后,获得不同值的表达式就是这个......
<xsl:value-of select="MAIN/BLOC[TYP=1][generate-id() = generate-id(key('blocs_by_typ_value', concat(TYP, '|', VALUE))[1])]/VALUE" />