iPhone:NSXMLParser发现Characters方法多次为单个标签调用

时间:2010-01-23 11:14:50

标签: iphone nsxmlparser

我能够解析XML文件。但我面临着奇怪的错误。我的XML文件格式是这样的

<contact>
   <contactServiceTag>3B92E6A7-B599-EAE9-1CB7B5592CB8695C</contactServiceTag>
   <contactDeletedBoolean>0</contactDeletedBoolean>
   <contactLinkStatus>Stored</contactLinkStatus>
   <contactName>P4</contactName>
   −
   <contactEmailAddresses>
     <workEmail>updatedp4@isol.co.in</workEmail>
     <personalEmail/>
     <otherEmail/>
   </contactEmailAddresses>
   <contactLastUpdated>{ts '2010-01-22 10:05:42'}</contactLastUpdated>
   <contactPhotoExists>False</contactPhotoExists>
</contact>

在解析过程中,当解析器解析元素 contactLastUpdated ,然后多次调用 foundCharacters 方法时,它首先返回值 {ts 第二次运行, \',第三次运行 2010-01-22 10:05:42 ,第四次运行 \',最后运行上次运行时} 。所以当我调用didEndElement方法时,我只得到最后一个值(} )。

请建议我如何解决此类错误

3 个答案:

答案 0 :(得分:4)

在&lt; NSXMLParserDelegate&gt;的实施中像parser:foundCharacters:这样的回调,你应该将找到的字符存储在实例变量中,可能将字符串连接在一起,这样当调用parser:didEndElement:namespaceURI:qualifiedName:时,你的对象可以使用完整的元素值/体通过其实例变量状态。

您可能还会了解SAXDOM解析器之间的区别。 NSXMLParser是一个SAX解析器,使用起来不太方便,但性能优于DOM解析器。

答案 1 :(得分:0)

在输入元素时创建一个字符串,在调用foundCharacters时附加到它,然后在didEndElement上检查它的长度/值?

答案 2 :(得分:0)

Jon和Mobs的答案都是正确的,这就是做到这一点的方法。为了更好地理解它是如何工作的,我建议你看一下Apple的Seismic XML示例项目。它以非常清晰的方式使用NSXMLParser,并且还显示了如何处理您所处的情况。