2016-11-15 91 views
1

在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包括没有命名空间

回答

2

在XSLT/XPath 3.0中,无论xpath-default-namespace的当前设置如何,您都可以编写match="Q{}local"来匹配no-namespace元素。

除了重置xpath-default-namespace之外,在2.0中没有办法做到这一点,您可以在任何具有本地作用域的元素上执行该操作。

0

下工作,虽然,我仍然好奇,如果有某种方式来指定没有namesapce如在比赛中表现的前缀

<xsl:template match="some_element" mode="something" xpath-default-expression=""> 
    ... 
    <xsl:sequence select="." /> 
    ... 
</xsl:template> 
相关问题