2

我能够解析 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 方法时,我只得到最后一个值(} )。

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

4

3 回答 3

4

在您的 < NSXMLParserDelegate > 回调(如 parser:foundCharacters:)的实现中,您应该将找到的字符存储在实例变量中,可能将一个字符串连接在一起,以便在调用 parser:didEndElement:namespaceURI:qualifiedName: 时,您拥有完整的您的对象通过其实例变量状态可用的元素值/主体。

您还可以阅读SAXDOM解析器之间的区别。NSXMLParser 是一个 SAX 解析器,使用起来不太方便,但性能比 DOM 解析器好。

于 2010-01-23T11:25:55.603 回答
0

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

于 2010-01-23T11:21:46.830 回答
0

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

于 2010-01-23T15:48:01.437 回答