NSXMLElement, без NSXMLDocument

У меня есть NSXMLElement, который является копией из другого места в моем коде. После того, как он был использован, он больше не подключен к NSXMLDocument. Это (то, что я считаю) не связано ни с чем.

Если я NSLog элемент NSXMLE, мне дают содержание. Я вижу это.

Но, если я пытаюсь использовать nodeForXPath, он ничего не возвращает. Это пусто Он не может ничего найти (если только я не ищу *, в этом случае он возвращает все с помощью /t/t/n/t/t).

Теперь, если я сделаю этот NSXMLElement корнем НОВОГО NSXMLDocument, а затем произведу поиск в новом документе, я смогу найти XPath отлично!

Я пытаюсь понять логику там. Я читал документацию, но я не нашел ничего, что объясняет, что здесь происходит (или, по крайней мере, я не понял этого, если бы нашел это в документации).

Я был бы очень признателен, если бы кто-нибудь помог мне понять, почему это происходит, и нужно ли мне использовать этот NSXMLDocument.

Вот мой код:

(элемент - это NSXMLElement, исходящий из NSArray хранимых NSXMLElements. Они являются копиями из документа, используемого в другом методе)

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]);

1 ответ

Решение

Вероятно, это связано с тем, что контекст xpath, используемый libxml2, содержит ссылку на документ. Если нет документа, он, вероятно, не знает, как действовать. Поведение, если вы ищете *, может быть особым случаем, потому что он знает, что должен вернуть все, поэтому он даже не пытается искать.

Другие вопросы по тегам