我有一個XML解析器。我從服務器獲取XML文件並將該XML文件寫入緩存中的本地文件。在做之前,我想檢查URL是否有XML文件。我如何檢查可用URL的頁面是XML頁面還是其他類型的頁面(例如:HTML,PHP)?我怎樣才能識別一個XML文件?在IOS中驗證XML文件
回答
最終,您必須查看檢索到的數據內容以確保它是有效的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
@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
@Rob:這不起作用。我得到這個例外。 「由於未捕獲異常導致應用程序'NSInvalidArgumentException',原因:' - [NSConcreteData statusCode]:無法識別的選擇器發送到實例」 – enadun
- 1. xml文件驗證
- 2. 驗證XML文件
- 3. 如何在ant中驗證xml文件?
- 4. XSD文件驗證個XML
- 5. 驗證大型Xml文件
- 6. Saxon XML驗證:驗證失敗時無法刪除XML文件
- 7. XML驗證不會釋放xml文件
- 8. 根據xml模式驗證xml文件
- 9. 驗證xml與任意xml文件
- 10. 驗證XML文件中的值
- 11. 用Eclipse在xml文件中進行XML驗證
- 12. 使用XSD架構文件驗證XML文件。 (XML結構)
- 13. 在Android中驗證XML Schema
- 14. 在Flex3 Air中驗證Xml
- 15. 在iOS中驗證Dropbox
- 16. Swift + Alamofire - 驗證並獲取XML文件
- 17. 自動化多個XML文件驗證
- 18. 驗證巨大的XML文件
- 19. 用xsd文件進行python xml驗證
- 20. 導入XML並驗證文件
- 21. 關於XML文件的DTD驗證
- 22. XML文件不會驗證到XSD
- 23. 驗證XML文件的簡單方法
- 24. 用於登錄驗證的Xml文件
- 25. YII2 XML文件上傳無法驗證
- 26. 使用PHP進行XML文件驗證
- 27. 錯誤而驗證XML文件XSD
- 28. 通過XSD文件驗證XML節點
- 29. XML驗證與不匹配的文件被驗證
- 30. 在xsd中驗證xml文件中的訂單屬性
順便說一下,拆分頭髮,PHP不是一種響應,而是一種用於生成響應的服務器語言。 PHP有可能返回XML或HTML(或JSON或圖像或...)。我懷疑你不關心服務器是否使用PHP,而只是內容類型(HTML,XML等)。 – Rob