0

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に新しい行をレンダリングできるテンプレートを呼び出すにはどうすればよいですか。

よろしくお願いします

4

1 に答える 1

1

テキストノードを操作する必要があるため、「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を構築しませんが、アイデアを提供します。<hr/> を使用して新しい行を表示しました。必要に応じて適切なコードをここに挿入します。
何が起こっている?XSLT スクリプトは、分割するテキストを含む要素に到達すると、名前付きテンプレートを呼び出し、テキストをパラメーターとして送信します。
名前付きテンプレートは、パラメーターに分割マーカーが含まれているかどうかを確認します。そうでない場合、テキストはそのまま使用されます。存在する場合、分割マーカーの前のテキストが使用され、後のテキストが名前付きテンプレートに再度 (再帰的に) 与えられます。

于 2012-11-02T13:38:19.907 に答える