0

我有一个 NSXMLElement,它是我代码中其他地方的副本。使用后,它不再连接到 NSXMLDocument。它(我相信是)与任何事物无关。

如果我 NSLog NSXMLElement,我会得到内容。我能看到它。

但是,如果我尝试使用 nodesForXPath,它不会返回任何内容。它是空白的。它找不到任何东西(除非我只搜索 *,在这种情况下它会返回 /t/t/n/t/t 的所有内容)。

现在,如果我将 NSXMLElement 设为 NEW NSXMLDocument 的根,然后搜索新文档,我可以完美地搜索 XPath!

我试图理解那里的逻辑。我一直在阅读文档,但我没有找到任何解释这里发生的事情的东西(或者至少,如果我在文档中找到它,我不明白它)。

我非常感谢有人帮助我准确理解为什么会发生这种情况,以及我是否需要使用这个 NSXMLDocument。

这是我的代码:

element是一个 NSXMLElement 来自存储的 NSXMLElements 的 NSArray。它们是来自另一个方法中使用的文档的副本)

NSArray* scene = [element nodesForXPath:@"scene[1]" error:nil];
NSLog(@"scene: %@", [[scene objectAtIndex:0] stringValue]);

但如果我这样做,我会得到一个结果:

NSXMLDocument* docElement = [[NSXMLDocument alloc] initWithRootElement:element];
NSArray* scene = [docElement nodesForXPath:@"scene[1]" error:nil];
NSLog(@"scene: %@", [[scene objectAtIndex:0] stringValue]);
4

1 回答 1

0

这可能是因为 libxml2 使用的 xpath 上下文包含对文档的引用。如果没有文件,它可能不知道如何操作。如果您搜索 * 的行为可能只是一种特殊情况,因为它知道它必须返回所有内容,因此它甚至不会尝试搜索。

于 2011-09-07T00:15:50.737 回答