如何检查响应是以xml格式而不是HTML格式?
我的服务器总是向我发送XML响应。但有时当服务器缺乏或者它通过发送给我一个HTML页面(它只是一个告知错误的html页面)而向我报告时,但我没有想到这一点,我的XML解析器崩溃了。
即时通讯使用DefaultHttpClient()和我发送头像mHttpRequest.setHeader("Accept", "text/xml");
那么确保我得到XML(或其他特定格式)响应的正确方法是什么?如何检查响应是以xml格式而不是HTML格式?
你可以检查响应的内容类型标题吗?
喜欢的东西(如果我明白Android documentation正确地):
"text/xml".equals(httpResponse.getEntity().getContentType().getValue());
(一般情况下)它*可能*不仅仅是“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。良好的解析器应该检测并报告相应的错误,而不仅仅是崩溃。
开头它可能不是UTF-8 ......但是,对于有效的XML文档,XML声明是必需的。 (再一次,这个世界并不完美:-) – 2011-07-16 21:37:40
我明白了。它只是向我报告一个被捕获的例外。它不会崩溃整个应用程序。 – Stan
您是否正确检查响应的状态码?如果这是导致HTML页面的错误,则不应得到200 OK。 – FRotthowe
目前我没有,我想你是对的。我会尝试解决返回的代码 – Stan