使用XSL将XML中的管道字符替换为新行

时间:2012-11-02 06:18:41

标签: xslt pdf-generation xslt-1.0 xsl-fo

我的XSLT代码测试片段将XML中的一些数据转换为PDF格式。

我现在面临的绊脚石是我必须读取XML中的字符串和

更换烟斗'||'新行的字符(在输出pdf上)

<Step>
     <TITLE>Measurement Result</TITLE>
     <MEAS OBJECT="REMARKS">
       <TITLE>Remarks</TITLE>
          <VALUE>Measurement completed.
             ||Findings: The battery is weak and should be replaced as soon as possible.
             || &gt;&gt; Contact helpline for more details
          </VALUE>
     </MEAS>
</Step>

如何调用模板,该模板可以读取此管道字符并最终在输出pdf上呈现新行。

提前致谢 VATSAG

1 个答案:

答案 0 :(得分:1)

因为你需要使用textnode,所以使用“substring-before”来分割字符串。这个例子有效:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="*">
        <xsl:apply-templates select="*"/>
    </xsl:template>
    <xsl:template match="VALUE">
        <xsl:call-template name="replace">
            <xsl:with-param name="txt">
                <xsl:value-of select="."/>
            </xsl:with-param>
        </xsl:call-template>
    </xsl:template>
    <xsl:template name="replace">
        <xsl:param name="txt"/>
        <xsl:if test="not(contains($txt,'||'))">
            <xsl:value-of select="$txt"/>
        </xsl:if>
        <xsl:if test="contains($txt,'||')">
            <xsl:value-of select="substring-before($txt,'||')"/>
            <hr/>
            <xsl:call-template name="replace">
                <xsl:with-param name="txt">
                    <xsl:value-of select="substring-after($txt,'||')"/>
                </xsl:with-param>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

它没有构建格式良好的xml,但提出了这个想法。我使用&lt; hr /&gt;显示新的一行。在此处插入适合您需求的相应代码 怎么了?当XSLT脚本到达包含要拆分的文本的元素时,它会调用命名模板并将文本作为参数发送。
命名模板检查参数是否包含拆分标记。如果不是,则文本不加改变地使用。如果是,则使用拆分标记之前的文本,然后将文本再次提供给命名模板(递归)。