0

CDATAセクションを使用していますが、テキストがいくつかの文字で構成されているため、閉じられ、解析の例外が発生します。

<xyz><![CDATA[\..\..\\..\..\\..\..\\..\..\\..\..\\\boot.ini]]>&#0;</xyz>

私はいくつかのサイトから以下のコードを見つけました:

// Add a CDATA section to the root element
Element element = doc.getDocumentElement();
CDATASection cdata = doc.createCDATASection("data");
element.appendChild(cdata);

// If "]]>" appears in the text, two CDATA sections will be written out
cdata = doc.createCDATASection("more]]>data");
element.appendChild(cdata);

上記のロジックを使用する際の問題は、DBから読み取っている要素に「]]>」が含まれるかどうかわからないため、2つのCDATAセクションを記述できることです。

これについてはあなたの助けが必要です。

4

2 に答える 2

1

<![CDATA[最初と最後に追加するだけで、CDATAセクションに任意のテキストを入れることができると想像するのは非常によくある間違いです]]>。まず、データにが含まれているかどうかを確認する必要があります]]>。もしそうなら、通常の救済策は最初の']'の後にそれを分割することです、それで内容がであるならばA]]>B、それはとして書かれ<![CDATA[A]]]><![CDATA[]>B]]>ます。

この問題を回避する良い方法は、XMLを「手動で」シリアル化することを避け、代わりにシリアル化ライブラリを使用してジョブを実行することです。

于 2012-07-27T10:33:24.327 に答える
0

CDATAセクションで任意のテキストをエスケープすると、ネストできないため、エラーが発生しやすくなります。

代わりに、エンティティ参照を使用してテキストをエスケープしてください。

ただし、本当にCDATAセクションを使用したい場合は、ウィキペディアページのこのセクションが役立つ場合があります。

于 2012-07-27T05:31:03.210 に答える