如何在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" />
答案 0 :(得分:10)
您需要先在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中使用的名称空间前缀相同的名称空间前缀。名称空间前缀仅用作名称空间URI的简写。您可以声明并使用XLINK命名空间,如下所示:
<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@x-link:href" xmlns:x-link="http://www.w3.org/1999/xlink"/>
答案 1 :(得分:3)
虽然@ Mads-Hansen提供了一个很好的答案,但很高兴知道有另一种方法来引用名称空间中的名称:
在这种情况下,您还可以使用以下XPath表达式访问该属性:
DCPType/HTTP/Get/OnlineResource/@*
[namespace-uri() = 'http://www.w3.org/1999/xlink']