mob*_*bob 5 xml cocoa nsxmlparser
好的,我回来完成这项任务.我从我的网络服务器上正确下载了我的XML,其URL指向服务器的文件,但是,当我检测到网络"无法访问"时,我只是将URL指向我的应用程序的本地XML,我得到以下错误(NB文件是服务器上的那个的直接副本).
我找不到详细说明,但我认为这是指该URL指向一个无法访问的位置.我是否将此资源存储在错误的位置?我想我想在HomeDirectory/Library中找到它?
调试输出
loadMyXml: /var/mobile/Applications/950569B0-6113-48FC-A184-4F1B67A0510F/MyApp.app/SampleHtml.xml 2009-10-14 22:08:17.257 MyApp[288:207] Wah! It didn't work. Error Domain=NSXMLParserErrorDomain Code=5 "Operation could not be completed. (NSXMLParserErrorDomain error 5.)" 2009-10-14 22:08:17.270 MyApp[288:207] Operation could not be completed. (NSXMLParserErrorDomain error 5.)
Bde*_*eez 15
与接受的答案一样,我遇到了类似的问题,因为我使用以下方式加载文件:
[NSURL URLWithString:pathToFile]; // **Wrong**
Run Code Online (Sandbox Code Playgroud)
相反,那应该是:
[NSURL fileURLWithPath:pathToFile];
Run Code Online (Sandbox Code Playgroud)
我也花了很长时间来看看我的文件可能没有很好地形成,可能会丢失等等,然后才意识到这是一个如此简单的细微差别.
Apple的解释是:http: //developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSXMLParserPrematureDocumentEndError
Parser Error Constants
The following error types are defined by NSXMLParser.
typedef enum {
NSXMLParserPrematureDocumentEndError = 5
Run Code Online (Sandbox Code Playgroud)
并且错误的解释是:
NSXMLParserPrematureDocumentEndError
The document ended unexpectedly.
Available in Mac OS X v10.3 and later.
Declared in NSXMLParser.h.
Run Code Online (Sandbox Code Playgroud)
根据戴夫·德隆的说法,
这意味着它在解析您的文件时遇到问题。
我认为它可能是 XML 中的 XSLT 引用 - 因为它指向 Web 服务器。我将回顾并以改进的答案回到这个问题。
这是文件的路径。我的代码甚至没有接近正确的位置——而且我缺少一个尾随字母“s”。错误代码定义意味着“文件过早结束”,这导致我截断文件但没有成功。然后我回到基础知识并迭代文件系统来查找我的文件。
我通过使用 NSFileManager 迭代到我的文件进行调试,然后验证它是否可以使用 contentsAtPath方法加载。我可以用 NSLog() 转储它。一旦我确信该文件格式正确并以原始形式加载,我就确定我的 NSURL 是使用相同的语法和方法构建的。然后就正确加载了。现在我可以加载网络文件“全功能”内容或本地“示例”内容。
NSDirectoryEnumerator *dirEnumerator = [[NSFileManager defaultManager] enumeratorAtPath: NSHomeDirectory()];
NSString *something;
NSString *f;
while( something = [dirEnumerator nextObject] ) {
f = [[[NSString alloc] initWithFormat: @"%@/%@", NSHomeDirectory(), something] autorelease];
if( [f hasSuffix :@"two_cookies.xml"] ){
NSData *nsData = (NSData*) [[NSFileManager defaultManager] contentsAtPath: f];
NSLog(@"%@", nsData );
}
}
Run Code Online (Sandbox Code Playgroud)
输出
2009-10-22 00:47:40.147 MyApp[13843:20b] <?xml version="1.0" encoding="iso-8859-1"?>
Run Code Online (Sandbox Code Playgroud)
PS 我希望我在这里的明确说明对其他人调试数据处理时有所帮助。