從網絡獲取 NSData,需快速判斷其是否為 XML 文檔(即以 <?xml version="1.0"?> 開頭)。
NSData *data = [NSData dataWithContentsOfURL:url];
NSString *xmlString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
BOOL hasXMLTag = [xmlString hasPrefix:@"<?xml version=\"1.0\"?>"]; // 或 @"<?xml"
if (hasXMLTag) {
// 進一步解析 XML...
}
initWithData:encoding: 會完整解碼,若數據極大(>10MB)可考慮僅讀取前 100 字節判斷,避免全量解碼開銷。NSXMLParser 直接解析 NSData,解析器內部會自動檢測編碼聲明。NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse]; // delegate 的 parserDidStartDocument: 即確認為 XML
此法更健壯,且可同步完成解析,一舉兩得。