2011-07-16 9 views
3


私はいつもXMLを送信するサーバーで働いています。しかし、時にはサーバーが不足しているとか、HTMLページを返すことで私のことを報告してくれることもありますが、私はそれを期待せず、XMLパーサがクラッシュしました。
私はDefaultHttpClient()を使用しています。私はmHttpRequest.setHeader("Accept", "text/xml");のように送信します。
XML(または他の特定の形式)応答を得るための適切な方法は何ですか?応答がHTMLではなくXML形式であるかどうかを確認する方法は?

+0

レスポンスのステータスコードを正しく確認していますか?それがHTMLページにつながるエラーであれば、200 OKを得るべきではありません。 – FRotthowe

+0

現在、私はそうではありません。私は返されたコードを回避しようとします – Stan

答えて

4

クリスチャンが示唆したようにHTMLが放出されたとき、それは違うのContent-Typeを提供する場合、参照してください。私が<?xml...行を確認するのに失敗しました.DOCTYPEに書かれているか、HTMLページにあるものであるかのように見えます。

+0

私は実際にそのように考えていました – Stan

+0

すべてのXML文書が<?xml – Neftanic

3

レスポンスのコンテンツタイプヘッダーを確認できますか?以下のような

何か(私が正しくAndroid documentationを理解している場合):

"text/xml".equals(httpResponse.getEntity().getContentType().getValue()); 
+0

(一般的に)それは "text/xml"ではないかもしれません - 原子のフィードは非常に目立つ(そして共通の)反例です。 "/ xml" *および/または* "+ xml"にマッチするマントを探す方が良いかもしれません。 [インターネットメディアの種類](http://en.wikipedia.org/wiki/Internet_media_type)を参照してください。 –

2

すべてのXMLには、最初に文書記述子<?xml version="1.0" encoding="utf-8"?>が含まれています。これを解析する前に確認することができます。

しかし、私はあなたのパーサーでエラー処理と結果の検証が必要だと思います。ネットワークは安全な環境ではありません。半分の壊れたXML、不正なXML、または偽造されたXMLをネットワークから簡単に取得できます。適切なパーサーはそれを検出し、クラッシュだけでなく対応するエラーを報告する必要があります。

+0

で始まるわけではありませんが、UTF-8ではないかもしれません...しかし、XML宣言は有効なXML文書に必要です。 (そして再び、世界は完璧ではありません:-) –

+0

私はそれを得ました。それはちょうど私にキャッチされた例外を報告します。アプリ全体全体がクラッシュすることはありません。 – Stan

関連する問題