2

<?xml version="1.0" encoding="utf-8"?>ネストされたタグを使用して xml を解析するのを手伝ってくれませんか。このxmlを解析しようとすると、解析エラーが発生します。

<?xml version="1.0" encoding="utf-8"?>      
<soap>
            <soapenvBody>
                <serviceResponse>
                    <?xml version="1.0" encoding="UTF-8"?>
                    <data>
                        <respCode>0</respCode>
                    </data>
                </serviceResponse>
            </soapenvBody>
        </soap>  
4

4 に答える 4

2

HTML を処理するために作成されたパーサーは、あなたが望むことを行うことができるかもしれないと思いました。HTML は厳密な XML に比べて完全に混乱する傾向があるため、HTML パーサーは通常、はるかにエラー耐性があります。クイック検索でjsoupが見つかりました。respCodeおおよそ次のコードで、上記のサンプル XML から を取得できました。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

String data = "your xml goes here";
Document doc = Jsoup.parse(data);
String respCodeRaw = doc.select("respCode").first().text();
int respCode = Integer.valueOf(respCodeRaw);

(私は実際に Clojure repl でライブラリをテストしましたが、上記のコードは動作するはずです!)

于 2012-08-14T14:14:20.450 に答える
2

これは本当に Java の問題ではないと思います。XML 本体内に 2 番目の XML 宣言を含めることは違法であるため、XML パーサーでそれを解析することはできないと思います。XML を制御できる場合 (応答を格納するために XML を生成しているように見えます)、内部 XML ドキュメントをCDATAでラップしてみてください。

<?xml version="1.0" encoding="utf-8"?>     
<soap>
    <soapenvBody>
        <serviceResponse>
          <![CDATA[
              <?xml version="1.0" encoding="UTF-8"?>
              <data>
                  <respCode>0</respCode>
              </data>
          ]]>
        </serviceResponse>
    </soapenvBody>
</soap>

編集:

おそらく、その応答内で余分な XML 宣言をまったく必要としないと思います。応答を作成するコードを制御できますか? 私の推測では、XML スニペット<data>...</data>は別の DOM オブジェクトとして作成され、文字列は応答の途中で結合されます。XML ドキュメント オブジェクト全体を書き出すと、XML 宣言が含まれますが、ドキュメント ルート ノード オブジェクト( )だけを取得し<data>て文字列として書き出すと、おそらく、このすべての原因となっている余分な XML 宣言が含まれません。問題。

于 2012-08-06T07:22:38.297 に答える
0

このような埋め込みxmlを解析するためのパーサーがJavaで見つかりませんでした.xmlは有効なxmlではなく、解析する前にほとんどすべての解析がxmlを検証すると思います。そのため、xml を前処理するオプションを選択し、内側の xml を選択してから、SAX パーサーを使用して xml を解析し、xml から値を取得しました。皆さん、返信ありがとうございます。

于 2012-08-12T07:56:06.727 に答える
0

like で始まるタグ<?は処理命令です。<?xml...>は XML 宣言であり、xml コンテンツの先頭にのみ存在できます。XML 本文では使用できません。

なぜ石鹸本体にこれが含まれているのですか?それを削除するオプションはありますか?

于 2012-08-06T07:20:14.947 に答える