2010-05-06 81 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']