0

現在、次の構成を持つ古いコードに取り組んでいます。

Document doc = org.w3c.Document
Element root = doc.getDocumentElement();

if ( string contains \n or \r )
then
  root.appendChild(doc.createCDATASection(string))
else
  root.appendChild(doc.createTextNode(string))
endif  

「\n」または「\r」が含まれている場合、文字列を CDATA セクションに配置する必要がある使用法は考えられません。createTextNode を使用しても、値を設定または取得するときに文字列が「mytext\n\n\n」のような場合、テキストの改行がトリミングまたは削除されることはないと思います。

そのような文字列を CDATA セクションに入れたい有効/有用なケースを誰か考えられますか?

4

6 に答える 6

1

当たり前のように聞こえるかもしれませんが、プレーンな ascii テキスト ファイルを埋め込んでいて、ファイルの手動書式設定を逐語的に保持したい場合。それは有用なケースでしょう。

私が遭遇した他のケースは、画像からメタデータを出力することであり、それらのフォーマットを制御できません。

于 2009-05-29T09:16:44.330 に答える
1

XML では、CDATA は空白を保持しますが、通常のテキストは保持しません。

于 2009-05-29T09:18:40.443 に答える
0

私はこれに基づいていない可能性がありますが、Javascript コードを CDATA タグ内に配置することをお勧めしたことを覚えているようです。実際、このスタック オーバーフローの質問に対して選択された回答を参照してください。なぜなら、スクリプト タグ内で CDATA セクションが必要なのはいつですか?

于 2009-05-29T09:15:28.560 に答える
0

テキストを CDATA セクション内に配置すると、どのパーサーもそれを無視するようになるため、上記のコードを使用して、パーサーが空白をどのように処理するように指示されたかに関係なく、正しいフォーマットを確保できます。

改行はそのセクションでは意味があり、単なる偶発的なものではないことを効果的に示していると思いました。ただし、改行が存在する場合にのみCDATA セクションを配置する理由がわからないため、指定されたコードの設計によるものではなく、単なる回避策であると思います。

于 2009-05-29T09:19:10.880 に答える
0

XML 解析で空白と制御文字を削除するかどうかに完全に依存していると言えます。.NET の System.Xml も、MSXML も Xerces もそうではないことは確かですが、それを行うためのオプションがあります。

于 2009-05-29T09:20:22.157 に答える
0

CDATA セクションを使用すると、XML オブジェクトがデータを処理する方法をまったく理解していなくても、任意のデータを XML ドキュメント内に配置できるため、XML オブジェクトの動作を理解していない人が CDATA セクションを頻繁に使用します。一般的に言えば、誰かが XML で CDATA を作成しているのを見たとき、私は、適切な説明が含まれていない限り、自分が何をしているのか本当にわかっていないという仮定から始めます。(そして、たいていの場合、その適切な説明は、彼らが何をしているかを知らなかったことを明らかにします。)

元の開発者は、空白を含むテキスト ノードの DOM の処理と、空白のみを含むテキスト ノードの処理を混同している可能性があります。DOM は空白のみのテキスト ノードを正規化することがよくありますが、これは次のような XML では問題になる可能性があります。

<xsl:value-of select="foo"/>
<xsl:text>    </xsl:text>
<xsl:value-of select="bar"/>

DOM がその 2 番目の要素の 4 つのスペースを 1 つのスペースに正規化すると、その変換の機能が変更されます。これは明らかに悪いことです。

しかし、次のような XSLT が表示されないのには理由があります。

<xsl:value-of select="foo"/>
<xsl:text><![CDATA[    ]]>/xsl:text>
<xsl:value-of select="bar"/>

つまり、XSLT プロセッサは、XML オブジェクトがどのように機能するかを理解している人々によって作成されており、特定のケースでは、空白のみのテキスト ノードで空白を保持するように DOM に指示することが重要であることを知っています。

于 2009-10-11T17:43:26.163 に答える