我有以下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
的1}}属性?
答案 0 :(得分:2)
这个时间太长,无法写评论,但是在您的问题中,您表明自己正在这样做...
export class AreaDistinguisher extends React.Component<AreaDistinguisherProps, {}> {
public render() {
switch (this.props.targetDisplay) {
case "page":
return this.buildPageDisplay();
case "report":
return this.buildReportDisplay();
case "tour":
return this.buildTourDisplay();
default:
return <div />;
}
}
private buildPageDisplay(): JSX.Element {
return <PageDisplay2 id={this.props.targetId}
onRelatedMenusChanged={(relatedMenus: RelatedMenu[]) => this.props.onRelatedMenusChanged(relatedMenus)} />;
}
private buildReportDisplay(): JSX.Element {
return <Report2Display />;
}
private buildTourDisplay(): JSX.Element {
return <TourDisplay menu={this.props.menu} />;
}
}
(尽管,正如您继续显示的那样,这里实际上应该是<xsl:attribute name="src" select="'{translate(@fixTest, '\','/')}'"/>
,而不是.
)
但是,这意味着您将撇号嵌套在以撇号分隔的字符串中,这是一种语法错误。因此,您应该编写此文件以使其在语法上正确。
@fixTest
但这将向您显示问题所在。 <xsl:attribute name="src" select="'{translate(@fixTest, "\","/")}'"/>
需要一个表达式。通过使用撇号对表达式进行定界,您已将其转换为字符串文字,因此该表达式不会得到求值。但是您无需在此处使用撇号或花括号。你应该写这个。。。
select
或者,添加“ file:///”前缀。...
<xsl:attribute name="src" select="translate(., '\', '\')"/>
但是有一种简单的方法,其中花括号(也称为“属性值模板”)确实适用,那就是编写此代码...
<xsl:attribute name="src" select="concat('file:///',translate(., '\', '/'))"/>
在这里,<fo:external-graphic src="file:///{translate(., '\', '/')}">
属性确实需要一个字符串,然后使用花括号将其用于评估表达式。
答案 1 :(得分:0)
好的,所以我想出了自己的问题。我没有包含我的<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>