【问题标题】:Validate a XML file in IOS在 IOS 中验证 XML 文件
【发布时间】:2013-06-21 05:23:24
【问题描述】:

我有一个 XML 解析器。我从服务器获取 XML 文件并将该 XML 文件写入缓存中的本地文件。在此之前,我想检查 URL 是否有 XML 文件。如何检查可用 URL 的页面是 XML 页面还是其他类型的页面(例如:HTML、PHP)?简而言之,我如何识别 XML 文件??

【问题讨论】:

  • 顺便说一句,PHP 不是一种响应类型,而是一种用于生成响应的服务器语言。 PHP 有可能返回 XML 或 HTML(或 JSON 或图像或......)。我怀疑你不关心服务器是否使用 PHP,而只关心内容类型(HTML、XML 等)。

标签: iphone ios xml-parsing


【解决方案1】:
【解决方案2】:

最终,您必须查看检索到的数据的内容以确保它是有效的 XML,而解析是最简单的方法。

如果您通过 HTTP 请求检索数据,您也可以在开始接收实际数据之前查看收到的响应。例如,如果使用NSURLConnection,您可以实现一个didReceiveResponse,它通常应该返回一个200作为状态码和text/xml作为内容类型:

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    if ([response isKindOfClass:[NSHTTPURLResponse class]])
    {
        NSHTTPURLResponse *httpResponse = (id)response;

        NSInteger statusCode = httpResponse.statusCode;
        NSString *contentType = httpResponse.allHeaderFields[@"Content-Type"];
        NSLog(@"%d; %@", statusCode, contentType);

        // check to see if statusCode == 200 and/or [contentType isEqualToString:@"text/xml"] here;
    }
}

顺便说一句,状态码和内容类型是由服务器设置的,因此无可否认,它取决于服务器的实现(例如,如果 XML 是由服务器以编程方式生成的,希望它设置这些 HTTP 响应字段正确,但如果您从第三方服务器检索 XML,则不能保证它们行为良好)。但是状态码 200 和内容类型“text/xml”是习惯性的,如果您只是检索 XML 文件,大多数服务器会适当地设置这些值。

验证 XML 最可靠的技术是从服务器接收数据,并将其提交给解析器,然后查看解析器是否返回错误。

【讨论】:

  • @RachithaS 请参阅Status Code Definitions 或相应的Wikipedia entry。例如,如果未找到您的 XML 的 URL,您将获得 404 状态代码(您最终会收到的数据通常是一个 HTML 页面,表明它没有找到,而不是一个格式正确的 XML) .
  • @Rob:这不起作用。我得到了这个例外。 “由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[NSConcreteData statusCode]:无法识别的选择器已发送到实例”
  • @enadun 该错误表明您尝试使用NSData 对象执行statusCode。如果您查看我上面的代码示例 (a) 我在 didReceiveResponse 中进行操作; (b) 我正在检查以确保 response 是一种 NSHTTPURLResponse 对象。这几乎听起来像你试图在didReceiveData 中使用statusCode(这不可能工作),或者类似的东西。查看您在哪里使用statusCode,并确保您没有尝试将它与NSData 对象一起使用。如果您仍然无法弄清楚,请使用代码示例更新您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2013-07-20
相关资源
最近更新 更多