XSLT选择唯一节点
对于像我这样的xslt新手来说,这让我发疯 输入:XSLT选择唯一节点,xslt,get,distinct,Xslt,Get,Distinct,对于像我这样的xslt新手来说,这让我发疯 输入: <root> <a><name>kyle</name></a> <b><name>stan</name></b> <b><name>wendy</name></b> <b><name>cece</name></b>
<root>
<a><name>kyle</name></a>
<b><name>stan</name></b>
<b><name>wendy</name></b>
<b><name>cece</name></b>
</root>
凯尔
斯坦
温迪
塞西
预期产出:
<root>
<a><name>kyle</name></a>
<b><name>stan</name></b>
</root>
凯尔
斯坦
我被要求返回“根”下的第一个唯一节点,我该怎么做
XSLT1.0或2.0都可以
非常感谢你 您可以匹配具有相同名称的前一个同级的任何元素,而不输出任何内容 XSLT示例:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*/*[preceding-sibling::*[name() = current()/name()]]"/>
</xsl:stylesheet>
输出(使用Saxon 9 HE):
凯尔
斯坦
XSLT2.0解决方案:
<?xml version="2.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:for-each-group select="root/*" group-by="local-name()">
<xsl:copy-of select="."/>
</xsl:for-each-group>
</root>
</xsl:template>
</xsl:stylesheet>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a>
<name>kyle</name>
</a>
<b>
<name>stan</name>
</b>
</root>
凯尔
斯坦
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a>
<name>kyle</name>
</a>
<b>
<name>stan</name>
</b>
</root>