2013-07-08 113 views
0

提前很抱歉,如果出現了像我以前的答案,但我已經確認並沒有準確地找到答案這個簡單的問題:XSLT屬性

<self-uri xlink:href="http://www.harmreductionjournal.com/content/1/1/5"> 

所有我想要做的是選擇屬性"xlink:href"

始終採用以下選擇的值返回空的結果:

<xsl:value-of select="@xlink:href"/> 

我已經凝固酶原期間通過屬性值迭代sod

xlink:href: http://www.harmreductionjournal.com/content/1/1/5 

我的問題很簡單:我如何獲得具有命名空間的屬性的值?這是我的理解,它應該像這樣工作。

如果你能指出我對SO的正確問題,那也足夠了。

在此先感謝。

編輯:

基於我檢查我的根樣式表聲明的答案,它看起來像這樣:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
    xmlns:mml="http://www.w3.org/1998/Math/MathML" 
    exclude-result-prefixes="xlink mml"> 

我猜排除屬性有事情做與問題。如果我替換它,我發現它仍然不起作用,並且結果xml在隨機的地方充滿了它。

+0

向我們展示XSLT,XML輸入,想要的結果和當前結果的最小但完整的樣本,以使我們能夠重現問題。到目前爲止,我們需要猜測XML輸入使用哪些名稱空間,以及在哪個上下文中有'xsl:value-of'。 –

回答

2

只要您的XSL文件具有映射到相同名稱空間的相同前綴,您的方法應該可以工作。換句話說,你的XSL文件應該有命名空間映射

xmlns:xlink="..." 

其中...是因爲該命名空間前綴的源文檔中定義的值相同。

1
<xsl:template match="self-uri"> 
    <xsl:value-of 
    select="@xlink:href" 
    xmlns:xlink="http://www.w3.org/1999/xlink"/> 
</xsl:template> 

應該這樣做,假設輸入文檔使用http://www.w3.org/TR/xlink11/。當然,您通常只需將xmlns:xlink="http://www.w3.org/1999/xlink"放在代碼的xsl:stylesheet元素上。