我正在开发一个需要解析一些 xml 的 iPhone 项目。xml 可能包含也可能不包含默认命名空间。我需要知道如何解析 xml,以防它使用默认命名空间。由于我需要同时读取写入 xml,因此我倾向于使用 KissXML,但我愿意接受建议。
这是我的代码:
NSString *content = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:@"bookstore" ofType:@"xml"] encoding:NSUTF8StringEncoding error:nil];
DDXMLDocument *theDocument = [[DDXMLDocument alloc] initWithXMLString:content options:0 error:nil];
NSArray *results = [theDocument nodesForXPath:@"//book" error:nil];
NSLog(@"%d", [results count]);
它在此 xml 上按预期工作:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
</book>
</bookstore>
但是当 xml 有一个命名空间时,就像这样,它停止工作:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore xmlns="[INSERT RANDOM NAMESPACE]">
<book category="COOKING">
<title lang="en">Everyday Italian</title>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
</book>
</bookstore>
当然,我可以只预处理字符串并删除 xmlns,尽管这感觉像是一种丑陋的 hack。处理这个问题的正确方法是什么?