5

如何获取xlink:hrefxsl 模板中称为 xml 节点的属性的值?

我有这个 xml 节点:

<DCPType>
 <HTTP>
  <Get>
   <OnlineResource test="hello" xlink:href="http://localhost/wms/default.aspx" 
      xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" />
  </Get>
 </HTTP>
</DCPType>

当我尝试以下 xsl 时,我收到一条错误消息,提示“未定义前缀 'xlink'”。:

<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@xlink:href" />

当我尝试这个简单的属性时,它可以工作:

<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@test" />
4

2 回答 2

11

您需要在 XSLT 中声明 XLINK 名称空间,然后才能引用它。

您可以将其添加到xsl:value-of元素中:

<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@xlink:href" xmlns:xlink="http://www.w3.org/1999/xlink" />

但是,如果您需要在样式表的其他区域引用它,那么在 XSLT 的文档元素的顶部声明它会更容易:

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:xlink="http://www.w3.org/1999/xlink">

顺便说一句,您不需要在样式表中使用与 XML 中相同的名称空间前缀。命名空间前缀仅用作命名空间 URI 的简写。您可以像这样声明和使用 XLINK 命名空间:

<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@x-link:href"  xmlns:x-link="http://www.w3.org/1999/xlink"/>
于 2010-05-06T11:25:47.470 回答
4

虽然@Mads-Hansen 提供了一个很好的答案,但很高兴知道有另一种方法可以引用命名空间中的名称

在这种情况下,您还可以使用以下 XPath 表达式访问该属性:

   DCPType/HTTP/Get/OnlineResource/@*
            [namespace-uri() = 'http://www.w3.org/1999/xlink']
于 2010-05-06T13:04:33.357 回答