好的,我回来完成这项任务。我从我的网络服务器正确下载了我的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.)
有帮助吗?

解决方案 3

根据Dave DeLong的说法,

  

这意味着解析文件时出现问题。

我认为它可能是XML中的XSLT引用 - 因为它指向Web服务器。我将通过改进的答案来回顾并回到这个问题。

这是文件的路径。我的代码甚至没有靠近正确的位置 - 我错过了一封拖尾字母''。错误代码定义意味着“文件的过早结束”,这导致我截断我的文件而没有任何成功。然后我回到基础并在文件系统上迭代以查找我的文件。

我通过使用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 );
    }
}

输出

2009-10-22 00:47:40.147 MyApp[13843:20b] <?xml version="1.0" encoding="iso-8859-1"?>

P.S。我希望我在这里明确对他们调试数据处理有帮助。

其他提示

与接受的答案一样,我遇到了类似的问题,因为我使用以下方式加载文件:

[NSURL URLWithString:pathToFile];  // **Wrong**

相反,那应该是:

[NSURL fileURLWithPath:pathToFile];

我还花了很长时间来看看我的文件可能没有很好地形成,可能会丢失等等,然后才意识到这是一个如此简单的细微差别。

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

错误的解释是:

NSXMLParserPrematureDocumentEndError

The document ended unexpectedly.

Available in Mac OS X v10.3 and later.

Declared in NSXMLParser.h.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top