0

以下のコードがあります。ステートメント 1 は、平均サイズ (~300 ~ 400 KB) の xml ファイルをロードし、その内容を文字列変数 (xmlContent) に格納します。ステートメント 2 は、jsp 変数 xmlContent の値を javascript 変数 xmlText に入れます。ステートメント 3 は、javascript で XMLDocument オブジェクトを作成しようとします (文字列を xml ドキュメントとしてロードして、DOM メソッドで解析できるようにします)。

xml ファイルには一重引用符と二重引用符の両方が含まれており、&***;. では、なぜ 3 番目のステートメントが null を返すのでしょうか? 誰か説明できますか?

エンコード/デコードを実行したり、エスケープしたりするなど、xml文字列データを転送するためのより良い方法を教えてもらえますか?

ありがとう。

<%
 String xmlContent = FileReader.readFile("/xml/books.xml");
%>
<script type="text/javascript">
 var xmlText = ' <% =xmlContent %> ';
 new DOMParser().parseFromString(xmlText, "text/xml");
 //I know that it will not work in IE
</script>
4

2 に答える 2

0

XML に改行文字 (LF / CRLF) が含まれている場合は、Javascript コードに渡す前に、それらを削除するか、Java コードでエスケープする必要があります。Javascript 側では、リテラル文字列を入力するようなものです。XML に改行が含まれている場合は、リテラル文字列を複数の行に分割するようなものです。

より安全な方法は、XML の改行を検索してバックスラッシュ改行に置き換え、Javascript の改行をエスケープし、複数行の Javascript 文字列を効果的に提供することです。これは、保持したい改行を含む CDATA セクションが XML にある場合にも正しく機能します。いくつかのコード:

xmlContent = xmlContent.replace("\n", "\\\n").replace("\r\n", "\\\r\n");
于 2012-04-13T12:53:48.103 に答える
0

XML スキーマ (XSD、および変更されない) を知っている場合は、JAXBを使用することをお勧めします。XML ファイルを処理し、Bean を JSP に返すサーブレットを実装できます。

于 2012-04-13T13:33:21.953 に答える