我见过类似的问题,但不完全是像这样的问题,但这是我想要做的。我有我的SMS中的XML,并从中创建了一个PDF日志。效果很好。我尝试添加这个新元素,并且在XSLT中使用了" replace“函数来替换字符,但是我想使用一个变量放入一个外部图形。如果我将XSLT变量的内容直接粘贴到FO文档中,它会生成没有问题的PDF,但我不会将标记和内容传递到FO文件中。我猜我错过了一些简单的东西。
XML代码片段:
<?xml version="1.0" encoding="UTF-8"?>
<SMSExport>
<SMSMessage>
<Kind>Sent</Kind>
<DateTime>2011-11-08 12:14:23 -0800</DateTime>
<Name>Sendee's name</Name>
<Number>+15553009008</Number>
<Message>Yay!!! - </Message>
</SMSMessage>
</SMSExport>XML代码片段:
<xsl:if test="not(following-sibling::Message/@File)">
<!-- Needs rework!!! "Graphic not taking -->
<xsl:variable name="emoji">
<fo:external-graphic src="emoji/emoji-E057.png"
content-height=".15in"/>
</xsl:variable>
<!-- Repeat added, to show a string replace works -->
<xsl:value-of select="replace(following-sibling::Message, '', ';-)')"/>
<fo:block/>
<xsl:value-of select="replace(following-sibling::Message, '',$emoji)"/>
</xsl:if>给出生成的FO块片段:
<fo:block start-indent=".35in" end-indent=".25in" keep-with-next="always">
Yay!!! ;-) - ;-);-);-)
<fo:block/>
Yay!!! -
</fo:block>提前感谢!
附加:(使用LarsH的答案,这是我处理递归的方式。希望能对其他人有所帮助。
为了递归处理字符串,我一直在上面的块中粘贴,并使用一个新的正则表达式。这是放置分析的单独实例,所以我不断地重复这一行,每个新项都被替换。也就是说,使用三个块,搜索三个项目(X,Y,Z):
This is the result of (x.gif)YZ.
This is the result of X(y.gif)Z.
This is the result of XY(z.gif).而不是我想要的是:
This is the result of (x.gif)(y.gif)(z.gif).对于其他情况,要处理此问题,只需替换不匹配的
<xsl:copy-of select="."/>代码行,嵌套下一个analyze块(在本例中,我还用颜文字字符的十六进制值替换了它,以避免出现空框)。我在这里只做了两个项目/级别,但你可以继续嵌套,它工作得很好:
<xsl:analyze-string select="following-sibling::Message" regex="">
<xsl:matching-substring>
<xsl:copy-of select="$E057"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:analyze-string select="." regex="">
<xsl:matching-substring>
<xsl:copy-of select="$E120"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:copy-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:non-matching-substring>
</xsl:analyze-string>发布于 2013-06-20 10:29:07
如果您使用的是XSLT 2.0,字符映射提供了一种更简单的方法来完成您想要做的事情。relevant section of the XSLT 2.0 spec有一个示例,其中包括为特定字符提供HTML img元素。
https://stackoverflow.com/questions/8392517
复制相似问题