是否可以使用 NSXMLParserDelegate 协议复制输入 XML 的片段?

Can I copy a fragment of the input XML using NSXMLParserDelegate protocol?

提问人:Grzegorz Adam Hankiewicz 提问时间:8/12/2013 更新时间:8/12/2013 访问量:32

问:

使用 NSXMLParserDelegate 协议解析 XML 是可以的,但是我需要在答案中逐字复制 XML 块。我想做的是将开头/结尾 XML 标记之间的所有内容逐字存储为 NSString 对象,以便我可以在将来的查询中重播此片段。

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

需要注意的一点是,我不是在以增量方式解析输入,而是使用完整的 xml 数据创建对象,然后调用它。因此,也许有一种方法可以关联原始 xml 数据中/内部的位置,以便我可以提取子范围?NSXMLParserparsedidStartElementdidEndElement

iPhone Objective-C XML 解析

评论


答:

0赞 Grzegorz Adam Hankiewicz 8/12/2013 #1

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

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

现在,此范围可以转换为在将来的查询中重复使用的 和 。这样做的好处是,内部的 XML 不需要解析,因为它是直接复制的,并且应该格式良好。NSString