2

私のxmlは次のとおりです。

<valid_path>
    <document var_name="some_value">
        <processControls>
            <p>Lots of good text here ...</p>
            <ul class="unIndentedList">
                <li> Graphical display of system</li>
                <li> Other bulleted items ...</li>
            </ul>
            <p>etc. etc. etc.</p>
        </processControls>
    </document>
</valid_path>

私の入力はこれによって決定されます:

<xsl:variable name="processControlsValue" select="/valid_path/document[@var_name='some_value']/processControls" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>

入力で見つかった特定の文字列を置き換えるために、再帰テンプレートを呼び出しています。呼び出しは次のとおりです。

<xsl:call-template name="bulRep">
    <xsl:with-param name="text" select="$processControlsValue"/>
    <xsl:with-param name="replace" select="'Graphical'"/>
    <xsl:with-param name="by" select="'foofoobars'"/>
</xsl:call-template>

テンプレートはこちら。

<xsl:template name="bulRep">
    <xsl:param name="text"/>
    <xsl:param name="replace"/>
    <xsl:param name="by"/>
    <xsl:choose>
        <xsl:when test="contains($text, $replace)">
            <xsl:value-of select="substring-before($text,$replace)"/>
            <xsl:value-of select="$by"/>
            <xsl:call-template name="bulRep">
                <xsl:with-param name="text" select="substring-after($text,$replace)"/>
                <xsl:with-param name="replace" select="$replace"/>
                <xsl:with-param name="by" select="$by"/>
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$text"/>
            <!--<xsl:apply-templates select="$text" />-->
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

テンプレートは、見つかった場合にテキストを置き換える限り機能します。(たとえば、'Graphical' は 'foofoobars' に置き換えられます) 私が抱えている問題は、value-of OR copy-of でフォーマットが失われることです。value-of は、テキストやフォーマットではなく、テキストを返すことに気付きました。また、フォーマットを保持するために copy-of を使用するように他の人に指示する多くの投稿を見つけました。ただし、これは機能していません。出力は単なる連続したテキスト行です。

ここで、value-of 行の代わりに apply-templates 行 (現在はコメントアウトされています) を使用し、テンプレートの「それ以外」の部分にヒットしていることを確認すると、目的の出力が得られます。段落、箇条書きなどを取得します。ただし、value-of または copy-of を使用するとテキストのみが取得され、apply-templates を使用すると文字列が一致すると壊れます。

私の最終結果は、xsl-fo を使用した PDF です。

私が今見ているもの:

ここにはたくさんの良いテキストがあります ... foofoobars システムの表示 その他の箇条書き項目 ... etc. etc. etc.

私が見たいもの:

ここにはたくさんの良いテキストがあります...

• システムの foofoobars 表示

• その他の箇条書き項目 ...

等等等

4

1 に答える 1