2013-06-24 30 views
2

我有一個XML解析器。我從服務器獲取XML文件並將該XML文件寫入緩存中的本地文件。在做之前,我想檢查URL是否有XML文件。我如何檢查可用URL的頁面是XML頁面還是其他類型的頁面(例如:HTML,PHP)?我怎樣才能識別一個XML文件?在IOS中驗證XML文件

+0

順便說一下,拆分頭髮,PHP不是一種響應,而是一種用於生成響應的服務器語言。 PHP有可能返回XML或HTML(或JSON或圖像或...)。我懷疑你不關心服務器是否使用PHP,而只是內容類型(HTML,XML等)。 – Rob

回答

1

最終,您必須查看檢索到的數據內容以確保它是有效的XML,解析是最簡單的方法。

如果您通過HTTP請求獲取數據,您可以在開始接收實際數據之前查看收到的響應。例如,如果使用NSURLConnection,你可以實現一個didReceiveResponse,應經常返回狀態代碼200text/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最可靠的技術是從服務器接收數據並將其提交給解析器,並查看解析器是否返回錯誤。

+0

此狀態碼的含義是什麼? – RachithaS

+0

@RachithaS請參見[狀態代碼定義](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)或相應的[Wikipedia條目](http://en.wikipedia.org/wiki/ List_of_HTTP_status_codes)。例如,如果沒有找到您的XML的URL,您將得到一個404狀態碼(並且您最終收到的數據通常是一個HTML頁面,表示找不到格式良好的XML) 。 – Rob

+0

@Rob:這不起作用。我得到這個例外。 「由於未捕獲異常導致應用程序'NSInvalidArgumentException',原因:' - [NSConcreteData statusCode]:無法識別的選擇器發送到實例」 – enadun