2

我要将一个 xml 文件解析到我的 iOS 应用程序中。好吧,当我只使用 xml 文件的 url 时我可以做到,但我希望能够在 Xcode 项目中解析文件。所以我使用了以下代码:

NSURL *xmlFile = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"Prices" ofType:@"xml"]];

NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithContentsOfURL:xmlFile];

但它不解析,我什至也使用了以下内容

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Prices.xml"];
NSData *data = [[NSData alloc]initWithContentsOfFile:path];
NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithData:data];

仍然没有解析,但如果我从 url 解析它就可以了

NSURL *url = [[NSURL alloc] initWithString:@"http://myurl/Data.xml"];

NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];

我需要不使用url来解析项目中的文件,但是在搜索了很多类似的问题之后,我仍然无法做到。

4

1 回答 1

3

我认为您的 xml 文件无法加载,因为它不是您的应用程序包的一部分,因为它不是您的应用程序目标的成员。

将您的 NSURL 构造逻辑分解为多行以找出确切的问题:

NSString *path = [[NSBundle mainBundle]pathForResource:@"Prices" ofType:@"xml"];
NSAssert(path, @"File does not exist in bundle! Check Target Membership. Or check for exact(!) filename match");
NSURL *xmlFile = [NSURL fileURLWithPath:path];
NSAssert(xmlFile, @"Could not create url from path. This should not happen because your problem is most likely in the path ;-)");

此代码将检查这一点path并且xmlFile不为零。path如果在您的捆绑包中找不到 Prices.xml,则为 nil。

如果您的应用程序在第一次抛出异常NSAssert:在 Xcode 中选择 xml 文件,打开文件检查器窗格并在“目标成员资格”中使您的 xml 文件成为应用程序目标的一部分。

如果它没有对这些断言中的任何一个抛出异常,则必须定义“不解析”的含义。(或启用断言)

于 2013-08-20T08:25:17.327 回答