XSLT を介して XML データを HTML で適切にフォーマットするのに問題があります。データの受信方法は次のとおりです。
This is some text. <p>
This is more text. <p>
This is even more text. <p>
<a href=www.google.com>Google's website</a> <p>
Return to my website.
だから私は再帰を持っています(この場合はそれが使われていると思います)セットアップ。これにより、p タグごとに新しい段落が作成され、Web サイトの p タグが削除されます。コードは次のとおりです。
<xsl:template name="replace_p">
<xsl:param name="text"/>
<xsl:choose>
<xsl:when test="contains($text, '<P>')">
<xsl:value-of select="substring-before($text, '<P>')"/>
<br/><br/>
<xsl:call-template name="replace_p">
<xsl:with-param name="text" select="substring-after($text, '<P>')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
これはうまく機能します...リンクがある場合を除きます。ユーザーが a href タグとコードを見るのではなく、リンクをクリックできるようにしたい。唯一の問題は... replace p テンプレートが実行されているときにこれを行う方法です。私の試み(おそらく近いとは言えませんが、正しい考えを持っているように感じます):
<xsl:template name="replace_p">
<xsl:param name="text"/>
<xsl:if test="contains($text, '<P>')">
<xsl:choose>
<xsl:when test="substring-before($text, '<P>') and substring-before($text, '<a href=')">
<xsl:value-of select="substring-before(substring-after($text, '<a href='), '>')"/>
<br/><br/>
<xsl:call-template name="replace_p">
<xsl:with-param name="text" select="substring-after($text, '<P>')"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="substring-before($text, '<P>')">
<xsl:value-of select="substring-before($text, '<P>')"/>
<br/><br/>
<xsl:call-template name="replace_p">
<xsl:with-param name="text" select="substring-after($text, '<P>')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
次の when ステートメントに進む前に両方をチェックしたいので、p タグと href タグのテストを最初に置きます。しかし...それが必ずしも機能するかどうかはわかりません。次の when ステートメントに進む前に、最初の p タグと href タグをチェックしますか?
また、タグと href 属性を作成する必要があることもわかっていますが、最初に適切なデータが表示されるように取り組みたいと考えています。:)
他に必要な情報があれば教えてください。
ありがとう!