- [NSXMLNode nodesForXPath: error:] возвращает пустой массив, но не должен

Я пытаюсь разобрать канал Atom. Я расширил NSXMLNode этим методом через категорию:

- (NSString *)stringValueForNodeAtXPath:(NSString *)XPath error:(NSError **)error {
  NSArray *nodes = [self nodesForXPath:XPath error:error];
  if ([nodes count] == 0) { return nil; }
  return [[nodes lastObject] stringValue];
}

Этот метод возвращает строковое значение узла, если ожидается только один узел.

Запись канала Atom выглядит так:

<entry>
  <title>A title</title>
  <id>Unique id</id>
</entry>

У меня есть NSXMLElement объект, подобный приведенному выше. Однако при попытке получить title или id из entry, -[NSXMLNode nodesForXPath:error:] возвращает пустой массив (и поэтому мое расширение возвращает nil):

_uniqueId = [[XMLElement stringValueForNodeAtXPath:@"/entry/id" error:error] copy];

В чем может быть проблема? Мой запрос XPath неверен? В entry явно есть id, а entry - корневой элемент.


Да, NSLog-ing XMLElement подтверждает мое последнее предложение.


person Community    schedule 08.10.2011    source источник
comment
Похоже, что в вашем реальном документе sourceXML есть пространство имен по умолчанию. Это наиболее часто задаваемые вопросы о том, как писать выражения XPath для узлов в XML-документе, имеющем пространство имен по умолчанию. Просто найдите пространство имен по умолчанию xpath.   -  person Dimitre Novatchev    schedule 08.10.2011
comment
возможный дубликат XPath с GDataXMLNode в Objective C   -  person Wayne    schedule 02.12.2011
comment
Или здесь: stackoverflow.com/questions/501171/   -  person Wayne    schedule 02.12.2011