2010-11-30 16 views
2

<と>ブラケットと変換されますこれが書かれると、HTML出力は次のように表示されます:HTMLは、私はいくつかのサンプルXMLを持って

Line 1&lt;br /&gt;Line 2&lt;br /&gt;Line 3 

私は見ることができます帽子ASPはコード内の括弧を変換していますが、私はなぜそれがわかりません。何かご意見は?

+0

良い質問、+1。 @Alejandroの良い説明に加えて、問題に対する最良の解決策を説明した私の答えを見てください。 –

+0

+1の質問は明確であり、決定的な答えを求めています。つまり、XSLドキュメントを投稿すると助けになることに注意してください。 – orangepips

+0

このデータを出力しているXSLの部分は、単純な = "sample" />です。 –

答えて

2

私はいくつかのサンプルXMLを持っている:

<sample><![CDATA[Line 1<br />Line 2<br />Line 3<br />]]></sample> 

これはテキストノード子とsample要素です。

恒等変換を適用するとします。結果は次のようになります。

<sample>Line 1&lt;br /&gt;Line 2&lt;br /&gt;Line 3&lt;br /&gt;</sample> 

なぜですか?テキストノードと属性値には特殊文字&があるため、文字エンティティとして<>エスケープします。

EDIT:もちろん、あなたがDOEを使用することができます...しかし、それはオプション機能だということのほかに、結果に関係なく(エンコード文字実体なし)どのテキストノードになることはありません。他のパーサが必要です(これは、HTMLフラグメントを(X)のHTMLドキュメントに出力し、エンコードしてフィードのようにエンコードし、不正な出力の危険性があります)。

このスタイルシート:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="sample"> 
     <p> 
      <xsl:value-of select="." disable-output-escaping="yes"/> 
     </p> 
    </xsl:template> 
</xsl:stylesheet> 

出力:

<p>Line 1<br />Line 2<br />Line 3<br /></p> 

は、(実際のマークアップ)としてレンダリング:

ライン1
ライン2
ライン3

+0

しかし、CDATAステートメントの中に書かれていると出力してはいけませんか? CDATAの目的は基本的にその中の特殊文字を無視するのではないのですか? –

+0

CDATAステートメントの目的は、データをシリアル化する別の方法を提供することです。コードブロック '<![CDATA [
]]>
'と ' < br/> 'は*意味的には同じです。どちらの場合も、内容が要素ではなくテキスト文字列として '
'であるサンプル要素があります。 HTML出力はデータのHTMLシリアル化であり、HTMLでも '<'文字をエスケープする必要があります。 – jasso

+0

@Steve K .: CDATAセクション:*「これを解析せず、テキストのように扱う」* –

1

に加え@アレハンドロの説明、彼女eは最高の解決策です。

テキスト(CDATA)ノードにマークアップを入れないでください。代わりの

<sample><![CDATA[Line 1<br />Line 2<br />Line 3<br />]]></sample> 

は常に作成:

<sample>Line 1<br />Line 2<br />Line 3<br /></sample> 

を忘れないでください:それを失っているCDATAの内側にマークアップを置きます。

1

問題を引き起こすのはXSL変換だと考えてください。次のようなこれを修正するためにあなたの.xslのドキュメントを編集することができるはずです:私はthis page about disable output escapingから盗んだ

<xsl:template match="."> 
    <xsl:value-of select="." disable-output-escaping="yes" /> 
    <!-- ... other XSL business here ... --> 
</xsl:template> 

レコードのために、私はXML/XSLが嫌いです - 問題を探すための解決策です。一般的に言えば、XML/XSLがマークアップを処理する必要がある場合は、問題の原因となることがあります。通常、マークアップの断片(XMLは有効ではないことが多いので、CDATAをラップして、体験している。

更新

OK、上記のように、動作しませんでした。もちろん、質問に対するコメントが追加されるまで、XSLがどのように見えるかはわかりませんでした。以下は、(this forum threadからアイデア)の作業を行います。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:template match="."> 
     <xsl:value-of select="sample" /> 
    </xsl:template> 
</xsl:stylesheet> 

キーが<xsl:output method="text" />です。

また、投票のために、理由をコメントしてください。

+0

@ orangpics:うん!一貫して分析できないデータを解析可能なデータとして扱うことは、あなたの問題の一部ではありません... –

+0

@Alejandro:ハァッ? – orangepips

+0

disable-out-escapingパラメータを追加しようとして失敗しました。 ASPは実際に出力上でそれを変更している犯人だと思われます。私はまた、それが変化していることを発見しました。&さんの... –

関連する問題