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, содержит ссылку на документ. Если нет документа, он, вероятно, не знает, как действовать. Поведение, если вы ищете *, может быть особым случаем, потому что он знает, что должен вернуть все, поэтому он даже не пытается искать.