如何检查响应是以xml格式而不是HTML格式?

问题描述:


我的服务器总是向我发送XML响应。但有时当服务器缺乏或者它通过发送给我一个HTML页面(它只是一个告知错误的html页面)而向我报告时,但我没有想到这一点,我的XML解析器崩溃了。
即时通讯使用DefaultHttpClient()和我发送头像mHttpRequest.setHeader("Accept", "text/xml");
那么确保我得到XML(或其他特定格式)响应的正确方法是什么?如何检查响应是以xml格式而不是HTML格式?

+0

您是否正确检查响应的状态码?如果这是导致HTML页面的错误,则不应得到200 OK。 – FRotthowe

+0

目前我没有,我想你是对的。我会尝试解决返回的代码 – Stan

作为克里斯蒂安建议的,看它是否提供了不同的内容类型的HTML被发射时。如果没有,我会检查<?xml...行,与doctype相关或HTML页面上的任何内容。

+0

我实际上也是这么想的 – Stan

+0

并非每个xml文档都以 Neftanic

你可以检查响应的内容类型标题吗?

喜欢的东西(如果我明白Android documentation正确地):

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

(一般情况下)它*可能*不仅仅是“text/xml” - 原子提要非常明显(和常见)反例。查找匹配“/ xml”*和/或*“+ xml”的mime可能会更好。请参阅[Internet媒体类型](http://en.wikipedia.org/wiki/Internet_media_type)。 – 2011-07-16 21:39:28

每个XML在开始时都包含文档描述符<?xml version="1.0" encoding="utf-8"?>。你可以在解析它之前检查它。

但是,我认为你需要在解析器中进行一些错误处理和结果验证。网络不是一个安全的环境 - 你可以很容易地从网络中获得一个半破损的,畸形的甚至伪造的XML。良好的解析器应该检测并报告相应的错误,而不仅仅是崩溃。

+0

开头它可能不是UTF-8 ......但是,对于有效的XML文档,XML声明是必需的。 (再一次,这个世界并不完美:-) – 2011-07-16 21:37:40

+0

我明白了。它只是向我报告一个被捕获的例外。它不会崩溃整个应用程序。 – Stan