在xpath表达式中不使用名称空间
问题描述:
在XSLT样式表中,我设置了xpath-default-namespace
以匹配样式表处理的输入文档。输出文档位于no命名空间中。在xpath表达式中不使用名称空间
例如,在xsl:stylesheet元素具有指定的XPath默认命名空间:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="http://my.example.com/"
>
在没有命名空间的变换,我建立的元素,我需要匹配这些元素。现在,我使用的结构,如:
<xsl:variable name="vCustomElement" as="element()">
<some_element>
<!-- element content -->
</some_element>
</xsl:variable>
<xsl:apply-templates select="$vCustomElement" mode="something" />
.
.
<xsl:template match="*:some_element" mode="something">
...
<xsl:sequence select="." />
...
</xsl:template>
这工作,但我很好奇,是有我的方式来指定没有命名空间,如XPath表达式中的前缀?以上仅适用,因为它匹配所有namesapces包括没有命名空间
答
在XSLT/XPath 3.0中,无论xpath-default-namespace的当前设置如何,您都可以编写match="Q{}local"
来匹配no-namespace元素。
除了重置xpath-default-namespace之外,在2.0中没有办法做到这一点,您可以在任何具有本地作用域的元素上执行该操作。
答
下工作,虽然,我仍然好奇,如果有某种方式来指定没有namesapce如在比赛中表现的前缀
<xsl:template match="some_element" mode="something" xpath-default-expression="">
...
<xsl:sequence select="." />
...
</xsl:template>