每当我尝试使用函数 node-name() 时,以下 XSLT 转换都会显示错误。
错误:E[Saxon6.5.5]URI http://www.w3.org/2005/xpath-functions未识别外部 Java 类
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<!--
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-->
<xsl:output method="text" />
<xsl:variable name="in" select="/"/>
<xsl:variable name="filter" select="document('elementsToBeLeftIn.xml')"/>
<xsl:template match="/">
<xsl:apply-templates select="*">
<xsl:with-param name="f" select="$filter/*"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="*">
<xsl:param name="f"/>
<xsl:choose>
<xsl:when test="$f/*">
<xsl:copy-of select="fn:node-name()"/>
<!--
<xsl:for-each select="*[fn:node-name(.) = $f/*/fn:node-name(.)]">
<xsl:apply-templates select=".">
<xsl:with-param name="f" select="f/*[fn:node-name() = current()/fn:node-name()]"/>
</xsl:apply-templates>
</xsl:for-each>
-->
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
谢谢大卫。这就是我真正想做的工作(它是递归的)。使用name()
我仍然得到错误*Unexpected tocken [<function>] in path expression*
。
在你之后
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<!--
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-->
<xsl:output method="text" />
<xsl:variable name="in" select="/"/>
<xsl:variable name="filter" select="document('elementsToBeLeftIn.xml')"/>
<xsl:template match="/">
<xsl:apply-templates select="*">
<xsl:with-param name="f" select="$filter/*"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="*">
<xsl:param name="f"/>
<xsl:choose>
<xsl:when test="$f/*">
<xsl:for-each select="*[name() = $f/*/name()]">
<xsl:apply-templates select=".">
<xsl:with-param name="f" select="f/*[name() = current()/name()]"/>
</xsl:apply-templates>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>