2010-06-17 17 views
0

我已经将一个XML文件作为NSData加载到内存中,并使用NSXMLParser来解析元素。尽管它有效,但维护代码非常难看,因为大约有150个不同的元素需要解析。从XML NSData表示中获取NSDictionary的快速方法?

我知道有很好的第三方解决方案,但我希望将它与iPhone SDK一起用于练习和乐趣。

所以我想:为什么不将该XML文件转换为NSDictionary?有了这个,我可以使用快速枚举来查看元素。

还是仅仅是使用NSXMLParser立即解析和处理XML所需的相同数量的丑陋代码?

我会为XML中的每个找到的节点建立一个NSDictionary并创建一个包含整个结构和数据的巨大NSDictionary?还是有更简单的方法?

回答

1

NSDictionary无法读取任何随机xml格式。它只能以plist格式的特定格式读取xml。

plist实际上早于xml,目前的plist格式只是原始的xml版本。名称plist是“属性列表”的缩写,因为这些文件定义了类的实例的属性。因此,文件中的所有xml标记都必须定义实现NSCoder协议的类实例的元素。

所以,是的,如果你从任意的xml开始,你必须费力地解析它,把它转换成一个NSDictionary或其他类。

我不会因为任何原因从头开始编写解析器,除非作为学习练习。每一个XML格式都需要一个不同的解析器。最好使用现有的解析器,以便完成80%的工作。在一个真实的项目中,无论如何你最终都会这样做。

1

那里有许多解析器(例如XPathQuery,TouchXML等)。

+1

那么随iPhone SDK一起提供的NSXMLParser呢?其他人做了什么不同? – dontWatchMyProfile 2010-06-17 15:23:41

+0

使用NSXMLParser,您将不得不通过自己构建对象层次结构。第三方解析器通常返回一个对象(NSArray或NSDictionary),它保存NSArray和NSDictionary等对象中的整个层次结构。另外,通常第三方解析器通常建立在libxml上,而不是NSXMLParser - libxml更快。还有一件事 - 据我所知,你不能使用NSXMLParser解析本地文件,但也许我错了这个... – 2010-06-17 20:33:35