2012-06-01 41 views
0

我試圖在我的XSL轉換過程中獲取iWantToGetThis.jpg的值並將其放入<img>。這是我的XML是如何結構:使用XSL獲取XML文檔中屬性的值

<article> 
    <info> 
     <mediaobject> 
      <imageobject> 
       <imagedata fileref='iWantToGetThis.jpg'> 

下面是我想出了XSL:

<xsl:template name="user.header.content"> 
    <xsl:stylesheet xmlns:d='http://docbook.org/ns/docbook'> 
     <img><xsl:attribute name="src">../icons/<xsl:value-of select='ancestor-or-self::d:article/info/mediaobject/imageobject/imagedata/@fileref' /></xsl:attribute></img> 
    </xsl:stylesheet> 
</xsl:template> 

圖像被添加到輸出,但src屬性設置爲「../icons/」,所以我假設它沒有在XML中找到fileref屬性。這看起來對我完全有效,所以我不確定我錯過了什麼。

回答

0

我不確定如何獲取任何東西,因爲它看起來不像一個有效的XSLT文檔(我期望錯誤「Keyword xsl:stylesheet may not contain img。」)。

但是,它可能是你只是顯示代碼的一個片段。如果是這種情況,那麼您的問題可能是您只需指定文章元素的名稱空間,而您確實需要爲xpath中的所有元素指定它。試試這個

<xsl:value-of 
    select="ancestor-or-self::d:article/d:info/d:mediaobject/d:imageobject/d:imagedata/@fileref"/> 

另一個可能的問題可能是因爲您正在使用'祖先或自我'xpath軸來查找屬性。這隻有在您的當前上下文已在文章元素或其後代之一上時纔有效。

作爲一個側面說明,您可以通過使用屬性值模板這裏

<img src="../icons/{ancestor-or-self::d:article/d:info/d:mediaobject/d:imageobject/d:imagedata/@fileref}" /> 
+0

簡化代碼它只是在XPath表達式孩子缺少命名空間。 – Scribblemacher

+0

當完整形式只包含一個''元素時,允許使用這種形式的樣式表。樣式表只包含該模板元素的內容。 [在這裏閱讀](http://www.w3.org/TR/xslt#result-element-stylesheet)。 – Borodin

+0

我正在使用的XSL更加充實。發佈後我意識到這不是一個很好的XSL示例...... – Scribblemacher