-1

こんにちは、xml 内のノードのセクションに CDATA を適用しました。すべての<andはand>に置き換えられました。追加で交換したいです。&lt;&gt;"&quot;

置き換える CDATA 部分にどのような変更を加える必要があります"&quot;

4

1 に答える 1

1

何をしているのかはっきり言わないので、簡単にお答えするのは難しいです。

あなたの言いたいことがそれなら

  • XSLT スタイルシートにフィードする XML ドキュメントに CDATA マークの付いたセクションを追加しました。
  • 入力の CDATA セクションに対応するスタイルシートの出力の部分には、エンティティへの参照がltありgt、入力に山かっこがある場所があります (したがって、 に<p class="greeting">Hello, world</p>なり&lt;p class="greeting"&gt;Hello, world!&lt;/p&gt;、これはあなたが望むものです; そして
  • " が出力にも文字どおりに表示されないようにする必要がありますが、エンティティへの参照に置き換えます。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,'&quot;')">
        <xsl:variable name="sL" 
          select="substring-before($s,'&quot;')"/>
        <xsl:variable name="sR" 
          select="substring-after($s,'&quot;')"/>
        <xsl:value-of select="$sL"/>
        <xsl:text>&amp;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>&lt;p class=&amp;quot;greeting&amp;quot;&gt;Hello, 
world!&lt;/p&gt;</p>
</doc>

それがあなたの望むものではない場合は、質問をより詳細に説明してみてください。このような場合は、(a) 現在のコードの重要な部分、(b) サンプル入力、(c) 現在取得している出力のサンプル、およびその問題点の説明を提供することを常にお勧めします。 、および (d) 出力をどのように見せたいかのサンプル。(サンプルとコードの両方を短くしてください。読者が問題を再現できるように、可能な限り完全に動作する例を提供したいと考えています。)

于 2013-01-09T02:23:41.433 に答える