簡體   English   中英

XSL-FO圖像路徑問題-將反斜杠更改為正斜杠

[英]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, &quot;\&quot;,&quot;/&quot;)}'"/> 

但這將向您顯示問題所在。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM