我在NSXMLElement上使用nodesForXPath方法有一个奇怪的问题 我正在使用该调用来查找与名称匹配的元素的所有后代。 E.g:
NSError *error = nil;
NSArray *decendants = [self nodesForXPath:@".//xr" error:&error];
这通常似乎适用于我的代码。
然而,偶尔我会得到更多的匹配,而不是元素后代
在这种情况下,它似乎找到所有与从当前元素匹配到文档末尾的项目。
这似乎只发生在只有一层'后代 即元素的子元素都没有子元素。
这是我正在处理的巨大文件(80MB) 我正在删除一些元素,但我在搜索之前对节点进行规范化。
[self normalizeAdjacentTextNodesPreservingCDATA:NO];
有谁能说明这个问题的原因是什么?需要调查的领域?
谢谢。
答案 0 :(得分:1)
不只是你。经过一些实验,当你指定一个后代选择器时,看起来像nodesForXPath,objectsForXQuery和好友都被严重破坏了。它们有时会返回从当前元素的后代开始的每个匹配元素,而不是返回当前元素的匹配后代,而是一直持续到文档的末尾。
只有当搜索的元素显示为元素的直接子元素时,才会出现这种情况。 (你的里程可能会有所不同 - 我还没有对此进行过广泛的测试。)
我已将此错误报告为rdar:// 18317629,并已将其记录在OpenRadar中。在修复该错误之前,您必须手动迭代DOM树,或者小心避免在包含匹配元素的元素中搜索后代作为其直接子元素。