4

XML が POST 本文コンテンツとして読み取られる REST ベースの Web サービス コードを作成しています。<REQ>J*Wt!&Gs+aGphxR</REQ>

データには、英数字または記号が含まれる場合があります。

私はjson-jena jarを使用しており、xmlをJavaオブジェクトに変換して値を読み取っています。

JSONObject jsonObject = XML.toJSONObject(body);

上記の特定のリクエストについて、次のようなエラーが発生します org.json.JSONException: Missing ';' XML エンティティ内: &gs at 40 [文字 41 行 1]

エラーなしでjsonオブジェクトに変換する方法を教えてください。

私の要件は、REQ タグとユーザーが指定した実際の値 (エンコードされた文字列ではない) の間の値を読み取ることです。

4

3 に答える 3

4

問題は、サプライヤーが XML を送信していないことです。XML では&、エンティティを開始し、エンティティを終了する必要があります。;

例の正しい XML は、エンティティ参照(XML には and と for も含まれます)<REQ>J*Wt!&amp;Gs+aGphxR</REQ>で置き換えるか、データを CDATA セクションで囲むことです。&&amp;&lt;&gt;<><REQ><![CDATA[J*Wt!&Gs+aGphxR\]]></REQ>

于 2012-10-09T00:55:35.980 に答える
1

これは、変換自体を行う際のエラーではなく、XML の整形式について不平を言っているようです (ただし、おそらく変換の最初のステップとして XML を読み取っているため、エラーが表示されます)。

そもそもどのようにコンテンツを制作していますか?それ自体が整形式であることを確認する必要があります。あなたのような XML 要素は、<REQ>任意のテキストを持つことはできません。文字&および<は、要素コンテンツ内でエスケープする必要があります ('または、"属性コンテンツ内でエスケープする必要がある場合もあります)。&要素コンテンツ内でエスケープする必要を避けるために<、パーサーがそれらをサポートしていると仮定して、CDATA セクションを使用できますが、特定のシーケンスをエスケープ]]>する必要があることに注意してください。

于 2012-10-09T00:56:05.373 に答える
1

&文字が予約されているため、これは有効な XML ではありません。これを機能させるには、おそらく次のようにエスケープする必要があります&amp;。予約されているその他の記号は、、、"および<です>&quot;これらは、 、&lt;、およびのようにエスケープできます&gt

于 2012-10-09T00:56:31.570 に答える