从XML响应消息填充对象属性的最简单方法是什么?

时间:2010-01-31 07:08:23

标签: iphone objective-c xml web-services

我在使用iPhone SDK方面有相当多的经验。我有几个完全开发的应用程序,包括用于跟踪数据的实用程序应用程序和棋盘游戏。我认为自己是iPhone SDK的新手。在我理解某些内容之前,我也几乎没有检查文档和示例的问题,只要文档存在且有意义。

然而,我不是XML文档,解析属性和创建文档的专家。我编写了过去的PHP代码来访问Web服务并通过SOAP XML消息传递完成事务。我需要使用iPhone SDK做类似的应用程序。这就是我需要的。

1)创建XML消息以发送到SOAP服务 2)从SOAP服务接收XML消息 3)将XML响应消息解析为自定义对象

所有的URL和SOAP部分都相对简单。我开始气馁的地方是创建和解析XML消息的领域。使用PHP这些任务非常简单,因为语言已经内置在SOAP客户端中,您可以轻松地将映射对象分类为SOAP消息传递,并且只需自动处理繁重的XML处理。我考虑过编写代理PHP服务并简化iPhone方面所需的内容,但这只会使我想要的复杂化,并增加了对另一个应用程序的依赖,以便与我正在访问的Web服务一起工作。

似乎在iPhone SDK或objective-c中,您必须自己构建和解析XML消息。我真的很沮丧的想法是创建大量的自定义代码来逐个元素地解析每个消息元素。我已经看了一下TouchXML / KissXML,我认为它们不是我需要的。

这里的真正关键目标是我希望轻松接收XML消息以及如何将元素及其值复制到对象上。如果没有数小时编写解析类并理解创建XML文档的所有内容,怎么能这样做呢?

2 个答案:

答案 0 :(得分:1)

我已经使用Matt Gallagher的XPathQuery在iPhone上取得了巨大的成功。这很简单直接。

但是,我发现,我需要解析的消息比XML(甚至是他的简化解析器)能够简单得多。我修改了他的源代码以返回一个更容易使用的数据结构 - 而不是为每个节点提供一堆键(nodeName,nodeContent,nodeAttributeArray,attributeName,...),我只是创建嵌套数组和以节点名称为键,内容为对象的字典。我完全忽略了属性,如果有多个具有相同名称的节点,我只使用数组。 Here's that code。请注意,它仅在我关心的XML上进行了测试。 :)

编辑:哎呀,我刚刚意识到你也在寻找XML创作。这只是解析。我会把它留在这里作为部分答案。

答案 1 :(得分:1)

看起来你真正想要的是这个:

http://code.google.com/p/wsdl2objc/

因为它将从WSDL为您创建对象,并提供支持代码来发送/接收它们。

然而,最常发生的事情是人们没有使用SOAP进行移动Web服务,而是采用RESTFUL方法。

包括在HTTP POST请求中发布表单数据或通过GET查询,然后返回JSON或plists转为字典(服务器开发人员更广泛地理解JSON但是你必须更加小心地正确定义结构是传递,因为你可以做一些事情,比如有一个重复相同键的字典... plists更健壮,因为你不能真正构建任何“错误”,但在服务器端不太标准。)

如果你必须使用SOAP,WSDL2ObjC可能会为你节省大量的映射。