Reputation: 3620
In an XSLT stylesheet, I have set xpath-default-namespace
to match the input document that the stylesheet processes. The output document is in the no namespace.
For example, the xsl:stylesheet element has xpath-default-namespace specified:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="http://my.example.com/"
>
Within the transform, I am building elements with no namespace, and I need to match on these elements as well. For now, I use constructs such as:
<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>
This works, but I am curious, is there a way for me to specify no namespace as a prefix in an xpath expression? The above only works, as its matching all namesapces including the no namespace
Upvotes: 1
Views: 387
Reputation: 163595
In XSLT/XPath 3.0 you can write match="Q{}local"
to match a no-namespace element, regardless of the current setting of xpath-default-namespace.
There's no way to do this in 2.0, other than resetting xpath-default-namespace, which you can do on any element with local scope.
Upvotes: 2
Reputation: 3620
The following works, although, I am still curious if there is someway to specify the no namesapce as a prefix in the match expression
<xsl:template match="some_element" mode="something" xpath-default-expression="">
...
<xsl:sequence select="." />
...
</xsl:template>
Upvotes: 0