Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone:对于这个特定问题,SAX或DOM更好吗?_Iphone_Objective C_Xml_Dom_Sax - Fatal编程技术网

Iphone:对于这个特定问题,SAX或DOM更好吗?

Iphone:对于这个特定问题,SAX或DOM更好吗?,iphone,objective-c,xml,dom,sax,Iphone,Objective C,Xml,Dom,Sax,我的Iphone与我的SOAP web服务通信 我的XML中有一个调查问卷,其中包括问题、答案和一些UI信息的选择等等。因此,当用户使用IPhone为一组问题输入一个值并再次将其发送回Web服务时,该服务将向该XML添加新的未回答问题 因此,与Web服务的对话从一个空XML开始,并在用户回答问题和接收新问题时构建高达200-300Kb的XML。由于它是一个无状态Web服务,所有信息都将保存在XML中 实际上,我只需要从响应XML中查找和解析最新的问题,这对于SAX解析器应该很好,并且只修改XML

我的Iphone与我的SOAP web服务通信

我的XML中有一个调查问卷,其中包括问题、答案和一些UI信息的选择等等。因此,当用户使用IPhone为一组问题输入一个值并再次将其发送回Web服务时,该服务将向该XML添加新的未回答问题

因此,与Web服务的对话从一个空XML开始,并在用户回答问题和接收新问题时构建高达200-300Kb的XML。由于它是一个无状态Web服务,所有信息都将保存在XML中

实际上,我只需要从响应XML中查找和解析最新的问题,这对于SAX解析器应该很好,并且只修改XML的这一部分,同时添加新答案并通过Web服务再次发送修改后的XML。但用户也应该能够单击“后退”。这意味着我必须将XML保存在内存中(200-300KB),并在用户单击“上一步”和“下一步”时进行必要的解析

我的问题是哪种方法更好:

1-获取XML,使用DOM将其完全解析为对象,从内存中释放XML,并在用户单击“上一步”和“下一步”时仅处理对象。然后,当要将其发送回时,用我的对象从头组装一条新的XML消息。此外,这种方法似乎可以减少点击时间

2-使用SAX解析器,仅在用户单击“上一步”和“下一步”时需要进行解析。但是我必须把所有的XML都保存在内存中。我不知道Iphone是否能处理这个问题,因为每次我都会解析,所以下一步的操作应该需要更长的时间。但好的一面是,当我完成时,我不需要再次从对象重新组装XML


我认为第二种方法更好,你认为呢?哪种解析器适合这项工作?

阅读下面的文章,您将找到适合您的最佳解决方案


尽管如此,我还是会选择NSXMLDocument。

我个人更喜欢domxml解析器,因为它们易于使用,并且能够将解析/创建逻辑与代码的其余部分分离开来。您的应用程序似乎最适合使用DOM解析器,因为您自己说过,有时您只需要XML的某些部分,而不需要整个文档。SAX解析器不支持随机读取访问。

我认为速度不是文件大小的问题,SAX和DOM几乎可以完美地工作。也就是说,这篇文章包含了一个很好的速度比较和你的问题的重要信息。我的主要问题不是解析速度,而是应用程序设计。当用户单击“上一步”、“下一步”或“提前解析所有内容并从内存中释放XML”时进行解析。这样我仍然可以使用DOM并遵循上面提到的第二种方法?另外,据我所知,在编辑完数据后,我不需要从头开始重新构建XML,而只需要更改已更改的必要位置?如果这是真的,假设我解析了XML中最近的10个问题,并用数据填充对象,然后当用户输入数据时,我编辑了数据对象,最后我必须编辑XML中相应的元素,DOM适合这样做吗?我可以用哪个objective-C对象来做这个?是的,一切听起来都很好。那么,您必须返回下载的相同XML吗?上传速度较慢,可能需要一段时间。你没有什么问题的身份证吗?如果是这样,您可以简化回答,只发送问题和答案的ID以及个人身份数据。至于要使用什么对象,我可能只需要创建一个简单的对象,其中包含数据的属性(questionId、questionText等)。我将更改一些元素名称,为问题添加值并发送回,Web服务是无状态的,所以我不需要在服务器中保存任何信息。但是您的想法看起来不错,Web服务总是使用完整的XML进行响应,而客户机只使用问题和答案进行响应,这肯定会加快响应时间。但是我需要在web服务中做很多改变。你认为这值得努力吗?或者,通过简单地不解析整个XML,而是解析必要的部分,我可以重新获得几秒钟的时间,让它感觉不慢?这实际上取决于您的受众有多大,以及他们期望应用程序的响应速度有多快。由于您已经设置好了以某种方式工作的东西,我将继续这样做,直到您实现了所需的功能。一旦您没有被功能请求/进度更新淹没,那么您可以转向提高速度。如果应用程序的生命周期有限,那么花大量时间重新构建应用程序是没有意义的。谢谢,我认为届时将使用libxml2dom,必要时将进行解析。我是一名java开发人员,也是Obj-C的新手。最后,我感谢您为本项目推荐在Obj-C中使用哪些集合对象。e、 g使用linkedhashmap vs hashtable类型的RecComendation(如果有)。