2

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

4

2 回答 2

1

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

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

- (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 最可靠的技术是从服务器接收数据,并将其提交给解析器,然后查看解析器是否返回错误。

于 2013-06-24T16:22:10.807 回答
0

有多种解决方案可用:

http://knol2share.blogspot.in/2009/05/validate-xml-against-xsd-in-c.html

http://wiki.njh.eu/XML-Schema_validation_with_libxml2

在 NSXMLParser 中解析之前检查正确的 xml

希望这会帮助你。

于 2013-06-24T16:13:03.883 回答