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:/// 连接到该值并将其设置为我的src 属性 fo:external-graphic?

好的,我想出了我自己的问题。我没有包含我的 <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>

写在评论中有点太长了,但在你的问题中你表明你正在这样做...

<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 属性确实需要一个字符串,然后大括号用于计算表达式。