gpt4 book ai didi

objective-c - 如何消除在 Cocoa 中打开 xml 文件时出现的错误

转载 作者:行者123 更新时间:2023-12-03 17:56:23 26 4
gpt4 key购买 nike

首先,我创建了一个示例应用程序,可以在其中写入 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 ];

这工作正常,并创建了 book.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 均由方案/协议(protocol)(http、文件、https、...)、分隔符 (://) 和路径 (~/Desktop/...) 组成。而且它是强制性的,而不是可选的。当您使用 URLWithString: 时,它期望您的字符串是完整的 URL,而不仅仅是其中的一部分(在您的情况下缺少方案/协议(protocol))。

因此,如果您确实想使用 URL 而不是文件路径,则必须处理 file:// (当使用 URLWithString: 时)或执行以下操作使用 fileURLWithPath:isDirectory: 您可以仅传递文件路径。

您这样做,只是警告其他人,如果您的路径确实包含波形符 (~),则必须先将其展开。

关于objective-c - 如何消除在 Cocoa 中打开 xml 文件时出现的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12881086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com