我可以在这里做一些愚蠢的事情,我打赌有一种更简单的方法......我需要访问一个节点的命名空间。我的xml中的元素看起来像这样:
<somenamespace:element name="SomeName">
然后在我的xslt中,我使用:
访问这些元素 <xsl:template match="*[local-name()='element']">
<xsl:variable name="nodename">
<xsl:value-of select="local-name(current())"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="contains($nodename,':')">
嗯,当然它不起作用,因为即使在模板匹配中也没有“somenamespace”命名空间......
任何人都可以指导我,我在寻找什么?
答案 0 :(得分:3)
在我看来,您好像要测试该节点是否在非null命名空间中。正确的方法是
namespace-uri() != ''
您不应该查看词法名称是否具有前缀或包含冒号,因为如果该节点位于命名空间中,则可以使用前缀或不使用前缀来编写,并且这两种形式是等效的。< / p>
但我猜测你的真实,潜在的要求是什么。
答案 1 :(得分:1)
您正在寻找name
功能,例如:
<xsl:value-of select="name()"/>
返回somenamespace:element
答案 2 :(得分:1)
来自OP的评论:
我正在寻找一种方法来访问“somenamespace”前缀。
您可以通过:
访问当前节点名称的前缀substring-before(name(), ':")
另一种方式:
substring-before(name(), local-name())
以上产生空字符串''或前缀,后跟':'字符。
检查当前节点的名称是否带有前缀:
not(name() = local-name())