3

SAPからデータを取得し、それを解析してユーザーにレンダリングするJAVAアプリケーションがあります。データはJCOコネクタを使用してプルされます。

最近、例外がスローされました。

org.xml.sax.SAXParseException: Character reference "&#00" is an invalid XML character.

そのため、XMLを解析する前に、すべての特殊/不正な文字が置き換えられる新しいレベルの間接参照を作成することを計画しています。

ここでの私の質問は:

  1. XML内の不正な文字を置き換えるこの仕事をする既存の(オープンソース)ユーティリティはありますか?
  2. または、そのようなユーティリティを作成する必要がある場合、どのように処理する必要がありますか?
  3. 上記の例外がスローされるのはなぜですか?

ありがとうございました。

4

4 に答える 4

1

彼らの脱出のバグのように聞こえます。コンテキストによっては、SAP 開発者が行ったように独自の XML ユーティリティを作成するよりも、実際の XML ライブラリを使用する XMLWriter クラスの独自のバージョンを作成する方がよい場合があります。

または、文字コード を見ると、すべてを空の文字列に置き換えることで回避できる場合があります。

String goodXml = badXml.replaceAll("�", "");
于 2010-03-18T15:46:20.413 に答える
1

私の見解では、ソース (SAP) が交換を行う必要があります。それ以外の場合、プログラムに送信されるものは XML のように見えるかもしれませんが、そうではありません。

「&」を「&」に置き換えることは単純な String.replaceAll(...) を文字列から toXML() への呼び出しで行うことができますが、他の文字 (「<」と「>」) を置き換えるのは難しい場合があります。例えば)。

よろしくギヨーム

于 2010-03-18T14:32:04.503 に答える
0

XSLT変換の出力に文字1を挿入しようとした、関連するが反対の問題が発生しました。マーカーをゼロに置き換える後処理を検討しましたが、代わりにxsl:paramを使用することを選択しました。

私があなたの状況にあった場合、私は特注のエンコーディングを考え出し、XMLで無効な文字を置き換えて、解析で特殊なケースとして処理するか、可能であれば空白に置き換えます。

私はJCOの経験がないので、無効な文字をどこでどのように置き換えるかについてアドバイスできません。

于 2010-03-18T12:47:51.177 に答える
0

Apache Commons Lang クラスの StringEscapeUtils escapeXML メソッドを使用して、XML 内の非 ASCII 文字をエンコード/デコードできます。見る:

http://commons.apache.org/lang/api-2.4/index.html

XML 文字参照の仕組みについては、ウィキペディアで「数値文字参照」を検索してください。

于 2010-11-10T10:27:25.883 に答える