Objective-C nodeForXPath возвращает все результаты - PullRequest
1 голос
/ 28 июня 2011

это продолжение вопроса, который я отправил вчера.

Учитывая приведенный ниже пример XML-кода с автомобилями, я запускаю запрос xpath, перебираю результаты и вызываю «quickquery - getString» с подпрограммойэлемент.Я ожидаю, что с каждой итерацией цикла я получу один элемент внутри функции getString, но я не получаю.Вместо этого вызов nodeForXPath внутри функции getString возвращает все 4 имени машины вместо того, которое принадлежит этому подэлементу.

NSArray *listings = [response nodesForXPath:@"//car" error:&error];

//4 car elements found        
if(listings.count > 0)
{
    for (GDataXMLElement *listingElement in listings) 
    {
        //printing listingElements description at this point reveales only one car
        [QuickQuery getString:listingElement fromXPath:@"//name"];
    }
}

//this is defined in QuickQuery class
+(NSString *) getString:(GDataXMLElement *)element fromXPath:(NSString *)xPath
{
    NSError *error;
    //Query the name element for the spcific car element passed in
    NSArray *result = [element nodesForXPath:xPath error:&error]; /// ***THIS CALL

    //result.count is 4 at this stage ("BMW", "VW" ... etc)
    //out of the 4 calls made to this method, I would expect each value to come up once
    //but each time all 4 values are found.
    if(result.count > 0)
    {
        GDataXMLElement *singleValue = (GDataXMLElement *) [result objectAtIndex:0];
        return singleValue.stringValue;
    }
    return nil;
}


<cars>
  <car>
    <name>VW</name>
  </car>
  <car>
    <name>BMW</name>
  </car>
  <car>
    <name>Mazda</name>
  </car>
  <car>
    <name>Nissan</name>
  </car>
</cars>

Этот вопрос был опубликован ранее, это всего лишьБолее чистый пример и код.Название также более конкретное.

1 Ответ

4 голосов
/ 28 июня 2011

То, что вы видите, является правильным поведением для запроса "// имя". Вы должны использовать запрос относительно текущего узла, а не корня документа - это то, что вы делаете.

Взгляните на полезный учебник по XPath http://www.w3schools.com/xpath/

...