-1

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, '&lt;P&gt;')">
            <xsl:value-of select="substring-before($text, '&lt;P&gt;')"/>
             <br/><br/>
            <xsl:call-template name="replace_p">
                <xsl:with-param name="text" select="substring-after($text, '&lt;P&gt;')"/>
            </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, '&lt;P&gt;')">
        <xsl:choose>
            <xsl:when test="substring-before($text, '&lt;P&gt;') and substring-before($text, '&lt;a href=')">
                <xsl:value-of select="substring-before(substring-after($text, '&lt;a href='), '&gt;')"/>
                <br/><br/>
                <xsl:call-template name="replace_p">
                    <xsl:with-param name="text" select="substring-after($text, '&lt;P&gt;')"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:when test="substring-before($text, '&lt;P&gt;')">
                <xsl:value-of select="substring-before($text, '&lt;P&gt;')"/>
                <br/><br/>
                <xsl:call-template name="replace_p">
                    <xsl:with-param name="text" select="substring-after($text, '&lt;P&gt;')"/>
                </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 属性を作成する必要があることもわかっていますが、最初に適切なデータが表示されるように取り組みたいと考えています。:)

他に必要な情報があれば教えてください。

ありがとう!

4

2 に答える 2

1

問題は、違法な xml をテキストとして処理して変換しようとしていることです。

プレーン テキストを処理している場合は、xslt よりも適した手法が他にもあります。(正当な) xml を変換しない場合は xslt を使用しないでください。意味がありません。

本当に xslt を使用したい場合は、最初に正規の xml があることを確認してください。次に、テンプレートとセレクター、および xslt と xpath のすべての優れた機能を使用して、すべてが簡単になります。

楽しみのために、この記事の紹介を参照して、何を求めているのかを理解してください。

于 2012-05-31T20:51:04.493 に答える