2 に答える
XSLT は実際にはこのために設計されたものではありませんが、正規表現を使用して XSLT 2.0 を使用してそれを行うことはできますが、これは使用している XSLT のバージョンではなく、PHP は現在デフォルトで XSLT 2 を使用していません。バックエンドのプログラミング言語 (PHP など) で実行することをお勧めします。
使いたくないとおっしゃっていますstrip_tags
が、何か理由があるのでしょうか?保持できるタグを指定できます。
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('<',name(),'>')" />
<xsl:apply-templates mode="post"/>
<xsl:value-of select="concat('</',name(),'>')" />
</xsl:template>
<xsl:template match="p | br | b | a" mode="post">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="post"/>
</xsl:copy>
</xsl:template>
少し大雑把ですが、基本的には、p
、br
、b
またはa
要素は最後のテンプレートによって取得され、「そのまま」コピーされ、それ以外はすべて*
テンプレートによって取得され、実際の要素を使用するのではなく、代わりにエスケープされたテキストを出力します。最初のテンプレートは、その中のすべての要素が「投稿」モードを使用して処理されるようにするためのものです。したがって、これらのテンプレートは、処理すべきではない他のものを誤って処理することはありません。