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, "\","/")}'"/>
但这会告诉你问题出在哪里。 select
需要一个表达式。通过使用撇号分隔表达式,您已将其转换为字符串文字,因此不会对表达式求值。但是您不需要在这里使用撇号或花括号。你应该写这个....
<xsl:attribute name="src" select="translate(., '\', '\')"/>
或者,添加 "file:///" 前缀....
<xsl:attribute name="src" select="concat('file:///',translate(., '\', '/'))"/>
但是还有一种更简单的方法,其中大括号(也称为属性值模板)确实适用,那就是写这个...
<fo:external-graphic src="file:///{translate(., '\', '/')}">
此处,src
属性确实需要一个字符串,然后大括号用于计算表达式。
我有以下 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, "\","/")}'"/>
但这会告诉你问题出在哪里。 select
需要一个表达式。通过使用撇号分隔表达式,您已将其转换为字符串文字,因此不会对表达式求值。但是您不需要在这里使用撇号或花括号。你应该写这个....
<xsl:attribute name="src" select="translate(., '\', '\')"/>
或者,添加 "file:///" 前缀....
<xsl:attribute name="src" select="concat('file:///',translate(., '\', '/'))"/>
但是还有一种更简单的方法,其中大括号(也称为属性值模板)确实适用,那就是写这个...
<fo:external-graphic src="file:///{translate(., '\', '/')}">
此处,src
属性确实需要一个字符串,然后大括号用于计算表达式。