Iphone iosxml解析许多文档

Iphone iosxml解析许多文档,iphone,objective-c,ios,xml,nsxmlparser,Iphone,Objective C,Ios,Xml,Nsxmlparser,在我的应用程序中,我需要执行几个HTTP请求。所有这些请求都返回需要解析的XML文档,然后进入表视图或其他任何内容。。。整个应用程序中大约有10-20个文档。具有相同名称的属性可以出现在不同的文档中,因此我需要在委托方法中区分这些属性 我的方法是,只有一个带有NSXMLParserDelegate方法的类,每个文档使用不同的解析器(但使用相同的委托),并使用委托方法中的parser参数区分解析器(也称为文档)。但这变得相当复杂,我不想最后有太多不同的解析器实例变量和if子句。 难道没有更简单的方

在我的应用程序中,我需要执行几个HTTP请求。所有这些请求都返回需要解析的XML文档,然后进入表视图或其他任何内容。。。整个应用程序中大约有10-20个文档。具有相同名称的属性可以出现在不同的文档中,因此我需要在委托方法中区分这些属性

我的方法是,只有一个带有NSXMLParserDelegate方法的类,每个文档使用不同的解析器(但使用相同的委托),并使用委托方法中的parser参数区分解析器(也称为文档)。但这变得相当复杂,我不想最后有太多不同的解析器实例变量和if子句。
难道没有更简单的方法吗?我曾想过每个解析操作(=>不同的委托)有一个类,但我想那更糟。

如果您的XML只是为一堆记录编码,请查看使用块解析的RaptureXML,这样您就不必关心创建新对象了。您可以将文档的名称作为参数传递给解析块。它也比使用NSXMLParser简洁一百万倍。

一个选项是将XML委托回调和/或数据构造方法放在将通过解析特定XML类型创建的对象上。这将把对象的定义以及如何从xml或数据块创建对象的知识放在一个地方。通过尝试将所有类型的所有解析逻辑放在一个委托方法中,一个委托类会变得过于复杂,并且会分割您正在处理的每个类型的知识

这种方法的一个挑战是复合对象。例如,如果您有一个艺术家对象、一个包含艺术家的相册对象和一个获取艺术家列表的调用。一种方法是让正在解析的复合对象服从于另一个对象类(可能使用您自己的协议)。例如,album对象正在解析并点击“Artister”元素。因此,它知道分配一个艺术家,当它从委托回调中点击数据块时(直到它点击close Artister元素),它将继续调用将数据填充到其中的协议方法。这将如何处理该数据块的知识推迟到定义该对象的类。对于一个正在处理艺术家列表的类来说,它会这样做n次以建立一个列表。获取一个artist(artist类上的委托)的调用仍然会调用artist对象上的那些sate数据块填充方法


最后,在解析XML时构造对象(如果操作正确),可以降低内存并加快执行速度。与缓冲完整的xml字符串不同,创建完整的xml DOM可以使用更多的内存,这对用户来说也可能较慢。所以,也要考虑性能。

你可以有单独的类实例,或者如果使用LIXML2的DOM解析器更简单,那么你最终会做什么?谢谢,我喜欢这种方法,因为它遵循了我对“干净”设计的理解。不幸的是,创建XML文档的人并不认为非常面向对象。。不过我会尽力处理的。嘿,谢谢你的回复。虽然您的解决方案可能会更简单,但我最终选择了bryanmacs方法,主要是因为我想首先对xml处理有一个坚实的理解。