0

使用 NSXMLParserDelegate 协议解析 XML 很好,但是我需要在答案中逐字复制一大块 XML。我想做的是将开始/结束 XML 标记之间的所有内容逐字存储为 NSString 对象,这样我就可以在以后的查询中重播这个片段。

这是可能的还是唯一的解决方案是手动解析树,转换为时间对象,然后在将来的查询中返回 XML 字符串?

需要注意的一件事是,我没有增量解析输入,而是NSXMLParser使用完整的 xml 数据创建对象,然后调用parse它。所以也许有一种方法可以关联didStartElement/didEndElement在原始 xml 数据中的位置,以便我可以提取子范围?

4

1 回答 1

0

didStartElement和都didEndElement被传递,它通过和属性NSXMLParser跟踪解析的进度。不幸的是,没有直接的方法将这些行/列信息转换为缓冲区偏移量,但是您还必须使用特定的编码来解释。lineNumbercolumnNumberNSData

一种解决方案是将 转换NSData为 unichar 元素的缓冲区NSString::getCharacters:range: method。然后 unichar 缓冲区可以迭代扫描换行元素,直到找到 line/col 与NSXMLParser对象存储的值的匹配。对开始/结束标记执行此操作可以获得其中包含的 XML 字符的 unichar 范围。

现在这个范围可以转换为一个NSString和,在以后的查询中可以重用。这样做的好处是内部的 XML 不需要解析,因为它是直接复制的,并且期望格式正确。

于 2013-08-12T14:44:31.830 回答