0
4

2 に答える 2

0

XSLT は実際にはこのために設計されたものではありませんが、正規表現を使用して XSLT 2.0 を使用してそれを行うことはできますが、これは使用している XSLT のバージョンではなく、PHP は現在デフォルトで XSLT 2 を使用していません。バックエンドのプログラミング言語 (PHP など) で実行することをお勧めします。

使いたくないとおっしゃっていますstrip_tagsが、何か理由があるのでしょうか?保持できるタグを指定できます。

于 2012-06-23T09:52:26.897 に答える
0

post_content を属性値に入れると、XSLT でこれを行うのに苦労することになります。属性には 1 つの大きな長い文字列が含まれるだけだからです。ユーザーが無効な HTML を入力するとどうなりますか?

xml を「post_content」という要素に直接配置する場合は、次のテンプレートを使用できます。

<xsl:template match="post_content">
  <xsl:apply-templates mode="post" />
</xsl:template>

<xsl:template match="*" mode="post">
  <xsl:value-of select="concat('&lt;',name(),'&gt;')" />
  <xsl:apply-templates mode="post"/>
  <xsl:value-of select="concat('&lt;/',name(),'&gt;')" />
</xsl:template>

<xsl:template match="p | br | b | a" mode="post">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()" mode="post"/>
    </xsl:copy>
</xsl:template>

少し大雑把ですが、基本的には、pbrbまたはa要素は最後のテンプレートによって取得され、「そのまま」コピーされ、それ以外はすべて*テンプレートによって取得され、実際の要素を使用するのではなく、代わりにエスケープされたテキストを出力します。最初のテンプレートは、その中のすべての要素が「投稿」モードを使用して処理されるようにするためのものです。したがって、これらのテンプレートは、処理すべきではない他のものを誤って処理することはありません。

于 2012-06-23T20:19:04.907 に答える