NSXMLElement nodesForXPath .// <name>返回比后代更多的匹配</name>

时间:2014-07-16 12:58:12

标签: macos cocoa xpath

我在NSXMLElement上使用nodesForXPath方法有一个奇怪的问题 我正在使用该调用来查找与名称匹配的元素的所有后代。 E.g:

NSError *error = nil;
NSArray *decendants = [self nodesForXPath:@".//xr" error:&error];

这通常似乎适用于我的代码。
然而,偶尔我会得到更多的匹配,而不是元素后代 在这种情况下,它似乎找到所有与当前元素匹配到文档末尾的项目。

这似乎只发生在只有一层&#39;后代 即元素的子元素都没有子元素。

这是我正在处理的巨大文件(80MB) 我正在删除一些元素,但我在搜索之前对节点进行规范化。

[self normalizeAdjacentTextNodesPreservingCDATA:NO];

有谁能说明这个问题的原因是什么?需要调查的领域?

谢谢。

1 个答案:

答案 0 :(得分:1)

不只是你。经过一些实验,当你指定一个后代选择器时,看起来像nodesForXPath,objectsForXQuery和好友都被严重破坏了。它们有时会返回从当前元素的后代开始的每个匹配元素,而不是返回当前元素的匹配后代,而是一直持续到文档的末尾。

只有当搜索的元素显示为元素的直接子元素时,才会出现这种情况。 (你的里程可能会有所不同 - 我还没有对此进行过广泛的测试。)

我已将此错误报告为rdar:// 18317629,并已将其记录在OpenRadar中。在修复该错误之前,您必须手动迭代DOM树,或者小心避免在包含匹配元素的元素中搜索后代作为其直接子元素。