输入:
<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>
我被要求在'root'下返回第一个唯一节点,我该怎么做?
xslt 1.0或2.0都可以。
非常感谢!!!!
答案 0 :(得分:1)
您可以匹配具有相同名称的前一个兄弟的任何元素,而不输出任何内容。
示例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):
<root>
<a>
<name>kyle</name>
</a>
<b>
<name>stan</name>
</b>
</root>
答案 1 :(得分:1)
XSLT 2.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>