2010-05-06 82 views
4

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

我有这样的XML节点:“‘的XLink’没有定义前缀”

<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,我得到一个错误说:

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

当我试试这个简单的属性,它的工作原理:

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

很好的问题(+1)。查看我的答案以获得其他解决方案。 :) – 2010-05-06 13:05:16

回答

7

您需要声明XLink命名空间中的XSLT之前,你可以参考它。

你可以把它添加到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"/> 
+0

我与包含在顶部元素,因为我可能会在xls中使用这个不止一个地方。 – awe 2010-05-12 10:26:54

3

虽然@ MADS-汉森提供了一个很好的答案,这是好事,知道有引用是在命名空间名的另一种方式:

在这种情况下,你也可以存取权限与下面的XPath表达式的属性:

DCPType/HTTP/Get/OnlineResource/@* 
      [namespace-uri() = 'http://www.w3.org/1999/xlink']