方便的话,能不能把你 xml 的内容发上来?我试试
|
|
是一个很简单的XML文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <library-configuration> </library-configuration> |
|
如果是将内容先装到内存中,再解析就可以,但是直接传文件进去不行。
以下代码可以运行: NSString *xmlPathExt = [NSString stringWithFormat:@"%@%@", @"file://", xmlPath]; NSError *error; NSURL *url = [NSURL URLWithString:xmlPathExt]; NSString *xmlContent = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; xmlDocPtr xmlDoc = xmlParseDoc([xmlContent cStringUsingEncoding:NSUTF8StringEncoding]); |
|
我觉得是这个 xmlPath 不对,你到对应的 path 下找找,看能不能找到 xml 文件。 2. 不用自己拼接,用系统内置的方式: 3. 不用 url,用文件路径: 综上,我觉得是 xmlPath 的问题,如果你的 xml 文件是在包内,要随app 打包的话,用 [[NSBundle mainBundle] URLForResource:@”test” withExtension:@”xml”]取本地文件的路径;如果 xml 文件是从网络下载到本地的,比如是下载到 Document 目录下的,用这种方式获取 Document 目录: |
|
按照你说的方法我试了一下:
1. 我把XML文件放在模拟器的Documents目录下 2. 使用以下代码得到Documents的路径: NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject; 3. 然后拼接上我的XML文件名,试图读取。出来的结果还是nil. 休息了,明天再看看。 谢谢了! |
|
40分 |
恩 好的,我把我的测试方法也发上来: - (void)viewDidLoad { [super viewDidLoad]; NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject; NSLog(@"%@", documentPath); NSString *xmlPath = [documentPath stringByAppendingPathComponent:@"test.xml"]; // NSString *xmlPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"]; // NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"xml"]; // NSString *xmlPathExt = [NSString stringWithFormat:@"%@%@", @"file://", xmlPath]; NSError *error; // NSURL *errorUrl = [NSURL URLWithString:xmlPathExt]; NSString *xmlContent = [[NSString alloc] initWithContentsOfFile:xmlPath encoding:NSUTF8StringEncoding error:&error]; xmlDocPtr xmlDoc = xmlParseDoc([xmlContent cStringUsingEncoding:NSUTF8StringEncoding]); }
|
补充一下,是8.3:
|
|
找到原因了。
在我的程序中,首先使用SAX解析/处理一个XML文件,在parserDidEndDocument函数中,我调用了xmlParseFile。在iOS8.2和之前的版本,这样没有问题。但在iOS 8.3里就不行了。 我将我的代码从parseDidEndDocument函数中挪到外边,等到SAX处理完毕以后再调用这些逻辑。xmlParseFile就可以工作了。 但暂时还不知道Apple 在iOS 8.3里边做了什么改动导致这个变化。 感谢zhangao0086的关注。 |