如何在xslt中获取节点的名称空间?

aur*_*rel 5 xml xslt xpath namespaces

我可能在这里做一些愚蠢的事情,我敢打赌,这是一种更简单的方法……我需要访问节点的名称空间。我的xml中的元素看起来像这样:

<somenamespace:element name="SomeName">
Run Code Online (Sandbox Code Playgroud)

然后在我的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,':')">
Run Code Online (Sandbox Code Playgroud)

好吧,这当然是行不通的,因为即使在模板匹配中也没有“ somenamespace”命名空间。

谁能指导我,我在找什么?

Mic*_*Kay 5

在我看来,好像您想测试该节点是否位于非空命名空间中。正确的方法是

namespace-uri() != ''
Run Code Online (Sandbox Code Playgroud)

您不应该查看词法名称是否有前缀或包含冒号,因为如果节点位于名称空间中,则可以使用前缀或不使用前缀来编写它,并且两种形式是等效的。

但我猜测你真正的、潜在的需求是什么。


Kir*_*huk 3

您正在寻找name功能,例如:

<xsl:value-of select="name()"/>
Run Code Online (Sandbox Code Playgroud)

回报somenamespace:element