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

我有这个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" />

最佳答案

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

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

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

但是,如果您需要在样式表的其他区域中引用它,那么在XSLT的document元素的顶部声明它会更容易:
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:xlink="http://www.w3.org/1999/xlink">

顺便说一句,您不需要在样式表中使用与XML中相同的 namespace 前缀。 namespace 前缀仅用作 namespace URI的简写。您可以像这样声明和使用XLINK命名空间:
<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@x-link:href"  xmlns:x-link="http://www.w3.org/1999/xlink"/>

10-06 02:51