Can I parse a XML file that is on a web server without downloading the file?
我需要解析位于服务器上的XML文件并返回节点值,而无需将文件下载到设备中。目前,该文件正在下载到设备中以进行测试。这是我当前的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | + (NSString *)dataFilePath:(BOOL)forSave { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *documentsPath = [documentsDirectory stringByAppendingPathComponent:@"file.xml"]; return documentsPath; } + (NSString *)parse:(NSString *)nodesForPath:(NSString *)elementsForName { NSString *filePath = [self dataFilePath:FALSE]; NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:filePath]; NSError *error; GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error]; if (doc == nil) { return nil; } ViewController *view = [[[ViewController alloc] init] autorelease]; NSArray *getVersionInfo = [doc nodesForXPath:nodesForPath error:nil]; for (GDataXMLElement *versionInfo in getVersionInfo) { NSArray *elm1 = [versionInfo elementsForName:elementsForName]; GDataXMLElement *elm2 = (GDataXMLElement *) [elm1 objectAtIndex:0]; return elm2.stringValue; } [doc release]; [xmlData release]; } |
它可以正常工作,但可以解析文档目录中的文件。我将如何设置它以直接从Web服务器进行解析?谢谢
我看到的唯一方法是在服务器上运行程序以解析文件并将结果返回给手机。
为了使电话运行解析文件的代码,必须读取文件,根据定义,该文件将下载该文件。
您可以尝试使用XML的提取解析器,并仅以流的形式处理从网络接收的数据,并丢弃不需要的内容。
您从响应中读取了一些字节,对其进行了解析,处理,丢弃以及更多内容。您可能必须对拉式解析器进行自己的实现,因为您要处理不完整的XML(即无效的XML),或者要查找一个可以忍受数据结尾(肯定不是经过验证的解析器)的解析器。
如果要处理非常大的XML文件,可能需要为解析器实现自己的实现。这样,您只能存储所需的XML片段(您可能需要XML"树"的一部分,或者根本不需要XML,或者您可能需要保留XML中另一个节点引用的其他节点)。
对于通用答案,我们感到抱歉,但是我还没有在iOS上使用XML解析器,而且我离Mac atm也很近,无法测试NSXMLParser是否对您有用。
编辑:相关文章在这里。
即使您不想将文件保存到硬盘上,也必须将该文件的内容加载到RAM中。
将