iphone - iOS XML 解析多个文档

标签 iphone objective-c ios xml nsxmlparser

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

我的方法是只有 1 个类具有 NSXMLParserDelegate 方法,每个文档使用不同的解析器(但具有相同的委托(delegate)),并使用委托(delegate)方法中的解析器参数区分解析器(也称为文档)。但这变得相当复杂,我不想以大量不同的解析器实例变量和 if 子句结束。 没有更简单的方法吗?我想每个解析操作有 1 个类(=> 不同的代表),但我想那更糟..

最佳答案

一个选项是将 XML 委托(delegate)回调和/或数据构造方法放在将通过解析特定 xml 类型创建的对象上。这会将对象的定义连同如何从 xml 或数据 block 创建它的知识放在一个地方。通过尝试将所有类型的所有解析逻辑放在一个委托(delegate)方法中,这会使一个委托(delegate)类变得过于复杂,并拆分了您正在使用的每种类型的知识。

该方法的一个挑战是复合对象。例如,如果您有一个艺术家对象、一个包含艺术家的专辑对象和一个获取艺术家列表的调用。一种方法是让正在解析的复合对象服从其他对象类(可能使用您自己的协议(protocol))。例如,专辑对象正在解析并命中“艺术家”元素。所以它知道分配一个艺术家并且当它从委托(delegate)回调中命中数据 block 时(直到它命中接近艺术家元素) - 它会继续调用你的协议(protocol)方法将数据填充到其中。这推迟了如何处理该 block 的知识数据到定义该对象的类。对于处理艺术家列表的类,它会完成 n 次构建列表。获得一位艺术家(艺术家类的委托(delegate))的调用仍会调用艺术家对象上的那些状态数据 block 填充方法。

最后,如果处理得当,在解析 XML 时构造对象可以降低内存占用并加快执行速度。与缓冲完整的 xml 字符串相比,创建完整的 XML DOM 可以使用更多内存,这对用户来说也可能更慢。因此,还要考虑性能。

关于iphone - iOS XML 解析多个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12331996/

相关文章:

android - Socket.IO 与 Params Android 连接

iphone - 电子邮件正文中的超链接在 iPhone 中不起作用

iphone - 带字符串的 NSURL

ios - SCNNode.position 静态?

objective-c - 为什么一个简单的程序导入 <Foundation/Foundation.h> 而不是单独的头文件?

objective-c - Objective-C : How to add a red color tab to a tab bar controller

ios - 从父级到子级的 Swift Pass 事件

iphone - 在下载完成之前播放视频

ios - 在 FSCalendar 中添加自定义假期

ios - 代码 8 : linker command failed with exit code 1 (use -v to see invocation)