我正在尝试在分组后进行区别处理,但它不起作用。
使用此节点:
<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的所有值来分组。
为何在分组后不区分形式不起作用?
最佳答案
您还需要在以下节点的检查中包括对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" />
关于xml - XSLT 1不同分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43272911/