[英]XSL-FO image path problems - changing backslashes to forward
我有以下abc.xml代碼段。
<abc>Images\\Image.JPG</abc>
我想將此圖像顯示為PDF。 我正在使用Apache FOP使用XSL-FO將XML轉換為PDF。 不幸的是,我無法找到一種巧妙的方法來將反斜杠替換為正斜杠。 這是我正在使用的一些xsl代碼:
<fo:external-graphic> <xsl:variable name="fixTest">file:///<xsl:value-of select="abc"/> <xsl:attribute name="src" select="'{translate(@fixTest, '\\','/')}'"/> </fo:external-graphic>
我也有一些我一直試圖無效的代碼。 現在,我知道一旦弄清楚如何用XSL-FO文件將“ \\”替換為“ /”,便可以顯示圖像。 但是現在我不知道該怎么做。
<xsl:attribute name="src"><xsl:value-of select="concat('file:///',translate(@abc, '\\', '/'))"/></xsl:attribute>
有誰知道如何在元素abc
文本值中將“ \\”轉換為“ /”,以便我也可以將file:///
連接到該值並將其設置為fo:external-graphic
src
屬性?
寫評論太長了,但是在您的問題中,您表明自己正在這樣做...
<xsl:attribute name="src" select="'{translate(@fixTest, '\','/')}'"/>
(不過,正如您繼續顯示的那樣,它實際上應該是.
這里,而不是@fixTest
)
但是,這意味着您將撇號嵌套在以撇號定界的字符串中,這是一種語法錯誤。 因此,您應該編寫此文件以使其在語法上正確。
<xsl:attribute name="src" select="'{translate(@fixTest, "\","/")}'"/>
但這將向您顯示問題所在。 select
需要一個表達式。 通過使用撇號對表達式進行定界,您已將其轉換為字符串文字,因此該表達式不會得到求值。 但是您無需在此處使用撇號或花括號。 你應該寫這個。
<xsl:attribute name="src" select="translate(., '\', '\')"/>
或者,添加“ file:///”前綴。
<xsl:attribute name="src" select="concat('file:///',translate(., '\', '/'))"/>
但是,有一種甚至很簡單的方法,一種確實適用花括號(也稱為“屬性值模板”)的方法,就是這樣編寫...
<fo:external-graphic src="file:///{translate(., '\', '/')}">
在此, src
屬性確實需要一個字符串,然后使用花括號將其用於評估表達式。
好的,所以我想出了自己的問題。 我沒有包括我的<xsl:template match="abc">
元素,因為我認為這對我的問題不重要。 所以我需要做的就是使用.
在這里設置src
屬性時引用我自己的模板值
<xsl:attribute name="src"><xsl:value-of select="concat('file:///',translate(., '\\', '/'))"/></xsl:attribute>
我的xsl代碼的整個代碼段如下。
<xsl:template match="abc"> <fo:block xsl:use-attribute-sets="abc"> <fo:external-graphic> <xsl:attribute name="src"><xsl:value-of select="concat('file:///',translate(., '\\', '/'))"/></xsl:attribute> </fo:external-graphic> <xsl:apply-templates/> </fo:block> </xsl:template>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.