如何删除在可可中打开xml文件时的错误



为了从Cocoa xml读写编码开始,我创建了一个示例应用程序,我可以在其中写入XML文件,但在读取时出现一些错误。下面是代码。

NSXMLElement * root = [[NSXMLElement alloc ] initWithName:@"Book"]
NSXMLDocument * xmlDoc = [[NSXMLDocument alloc ] initWithRootElement: root ];
[root addChild:[NSXMLElement elementWithName: @"Name" stringValue:@"book name"]];
[root addChild:[NSXMLElement elementWithName:@"Author" stringValue:@"bool author"]];
 NSData * xmlData = [xmlDoc XMLDataWithOptions:NSXMLNodePrettyPrint];
[xmlData writeToFile:[@"~/Desktop/book.xml" stringByExpandingTildeInPath ]
 atomically:YES];
[xmlDoc release ];

这工作正常,并且创建了书.xml。但是当尝试读取此文件时,我在打开此文件时遇到了问题。这是代码。

NSString *strValue = [@"~/Desktop/book.xml" stringByExpandingTildeInPath];
NSURL * strUrl = [NSURL URLWithString:strValue];
NSError * err = nil;
NSXMLDocument  * xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:strUrl    
options:NSXMLDocumentTidyXML error:&err];
NSXMLNode * rootNode = [xmlDoc rootElement ];
[xmlDoc release ];

xmlDoc 的值为 nil。

您的回答将不胜感激。

谢谢陶西夫。

你在strValue中缺少file://。请参阅NSURL类文档...如果您不想手动弄乱前缀file://,则应使用 fileURLWithPath:isDirectory: .

为什么会这样?

简化您的情况解释 - 每个 URL 都由方案/协议(http、file、https、...)、分隔符 (://) 和路径 (~/Desktop/...) 组成。这是强制性的,而不是可选的。当您使用URLWithString:时,它期望您的字符串是完整的 URL,而不仅仅是其中的一部分(在您的情况下缺少方案/协议)。

因此,如果您确实想使用 URL 而不是文件路径,则必须注意file://(使用 URLWithString: 时)或使用可以只传递文件路径的fileURLWithPath:isDirectory:

你这样做,但只是警告其他人,如果你的路径确实包含波浪号 (~),你必须先展开它。

最新更新