2016-04-20 78 views
0

我認爲這是一個非常簡單的問題。但是,儘管我構建了非常花哨的xslt轉換,但這個簡單的轉換不能由我來解決。xslt屬性中的連字符(xsl-fo)

問題是: 我想添加屬性到xsl-fo節點,這取決於xml數據。這些屬性常常有一個連字符。我如何用xslt轉換添加這些變量,其中xsl:屬性不喜歡連字符。


在我有兩個屬性(名稱和值) 例一個XML節點:名字= 「FONT_SIZE」,值= 「7PT」

<Report> 
    <text content="I am a text"> 
    <blockFormat name="font_size" value="7pt" /> 
    </text> 
</Report> 

(我明白這是不是因爲想你想與風格etceters工作。這只是一個簡單的問題


現在我想打一個XSL-FO塊,我想地方的例子),通過USI塊元素屬性納克的XSL功能的xsl:屬性

<fo:block> 
    <attribute name="{replace(@name,'_','-')}" select="@value" /> 
.... 
</fo:block> 

目標改造後達到

<fo:block font-size="7pt"> 
.... 
</fo:block 

它不工作,我想這是因爲在XSLT我不能把一個連字符在屬性名稱中,但在fo-attribute中是需要的。

有沒有辦法使用xsl:屬性函數呢?

如果不是,你建議什麼樣的工作。

謝謝你的幫助!

+1

「*我想這是因爲在xslt我不能在屬性名稱中加一個連字符*」當然可以。這個失敗究竟如何?你有錯誤信息嗎?你確定你在使用XSLT 2.0處理器嗎? –

回答

0

有1000點的方式做到這一點,這裏是一個(我沒有做與報告元素的任何東西):

輸入:

<Report> 
    <text content="I am a text"> 
     <blockFormat name="font_size" value="7pt" /> 
    </text> 
</Report> 

XSL:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    version="1.0"> 
    <xsl:template match="Report"> 
     <xsl:copy> 
      <xsl:apply-templates/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="text"> 
     <fo:block> 
      <xsl:apply-templates select="blockFormat/@*"/> 
      <xsl:value-of select="@content"/> 
     </fo:block> 
    </xsl:template> 
    <xsl:template match="@name"> 
     <xsl:attribute name="{translate(.,'_','-')}"> 
      <xsl:value-of select="ancestor::blockFormat/@value"/> 
     </xsl:attribute> 
    </xsl:template> 
    <xsl:template match="@value"/> 
</xsl:stylesheet> 

輸出:

<Report> 
    <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" font-size="7pt">I am a text</fo:block> 
</Report> 
+0

太棒了,確實太簡單了。我沒有使用翻譯功能,這給我帶來了麻煩。現在我可以輕鬆應對了! –

0

使用@select代替@value

<fo:block> 
    <attribute name="{replace(@name,'_','-')}" select="@value" /> 
.... 
</fo:block> 

https://www.w3.org/TR/xslt20/#creating-attributes

另外,你需要使用XSLT 2.0或3.0使用@select是。如果您使用XSLT 1.0,則必須將其作爲xsl:attribute/xsl:value-of/@select

(這也將幫助你的問題的瞭解,如果你想也顯示錯誤的結果,你都拿到。)

+0

對不起,我在輸入問題時犯了一個錯誤。我使用'選擇'。你無法知道。問題是我沒有得到錯誤的輸出,但在轉換時出現故障。也許它只是在xsl-fo處理步驟中。我看不到那麼快。我會盡力找出答案。 –

+0

'