こんにちは、xml 内のノードのセクションに CDATA を適用しました。すべての<
andはand>
に置き換えられました。追加で交換したいです。<
>
"
"
置き換える CDATA 部分にどのような変更を加える必要があります"
か"
何をしているのかはっきり言わないので、簡単にお答えするのは難しいです。
あなたの言いたいことがそれなら
lt
ありgt
、入力に山かっこがある場所があります (したがって、 に<p class="greeting">Hello, world</p>
なり<p class="greeting">Hello, world!</p>
、これはあなたが望むものです; そしてquot
次に、目的を達成する1つの方法は、テキストノードを処理するテンプレートを作成することです。これは、「」の存在をテストし、テキストノードを最初の部分で左部分と右部分に分割し、左部分を書き出し、書き出しますアンパサンド、 を書き出してからquot;
、文字列の右側の部分で再帰的に自分自身を呼び出します。
次のスタイルシートは、パターンを示しています。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="doc">
<xsl:element name="doc">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="text()" name="escape-quot">
<xsl:param name="s" select="."/>
<xsl:choose>
<xsl:when test="contains($s,'"')">
<xsl:variable name="sL"
select="substring-before($s,'"')"/>
<xsl:variable name="sR"
select="substring-after($s,'"')"/>
<xsl:value-of select="$sL"/>
<xsl:text>&quot;</xsl:text>
<xsl:call-template name="escape-quot">
<xsl:with-param name="s" select="$sR"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$s"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
これを次の入力に適用して、結果を確認できます。
<doc>Hi. This is a test.
<![CDATA[<p class="greeting">Hello,
world!</p>]]>
</doc>
私が得た結果は、あなたが探しているものだと思います。
<?xml version="1.0"?>
<doc><p>Hi. This is a test.</p>
<p><p class=&quot;greeting&quot;>Hello,
world!</p></p>
</doc>
それがあなたの望むものではない場合は、質問をより詳細に説明してみてください。このような場合は、(a) 現在のコードの重要な部分、(b) サンプル入力、(c) 現在取得している出力のサンプル、およびその問題点の説明を提供することを常にお勧めします。 、および (d) 出力をどのように見せたいかのサンプル。(サンプルとコードの両方を短くしてください。読者が問題を再現できるように、可能な限り完全に動作する例を提供したいと考えています。)