Как проанализировать значение дочернего узла xml через синтаксический анализатор kissxml? - PullRequest
2 голосов
/ 11 апреля 2011

У меня есть этот xml-файл:



    boiling1.jpg
    png1.png
    png2.png
    png3.png
    png4.png
  
  
    boiling2.jpeg
    png5.png
    png6.png
    png7.png
    png8.png
  
  
    roasted1.jpeg
    png8.png
    png9.png
    png10.png
    png11.png
   
  
    roasted2.jpeg
    png12.png
    png13.png
    png1.png
    png2.png
   

Теперь я анализирую его следующим образом:
    DDXMLNode *node = [item attributeForName:@"value"];

    if ([[node stringValue] isEqual:@"boiled"]) {
        [listOfBoiledItems addObject:model];

        DDXMLNode *node1 = [item attributeForName:@"value"];

        if ([[node1 stringValue] isEqual:@"boiling1recipe"]) {
            [listOfRecipies1 addObject:model];
        }
        else if ([[node1 stringValue] isEqual:@"boiling2recipe"]) { 
            [listOfRecipies2 addObject:model];
        }
     }
            else if ([[node stringValue] isEqual:@"rosted"]) {  
        [listOfRostedItems addObject:model];

        DDXMLNode *node1 = [item attributeForName:@"value"];

        if ([[node1 stringValue] isEqual:@"roasted1recipe"]) {  
            [listOfRecipies6 addObject:model];
        }
        else if ([[node1 stringValue] isEqual:@"roasted2recipe"]) {
            [listOfRecipies7 addObject:model];
        }
    }

Здесь компилятор читает значение родительского узла, т. Е.rosted ", но не читает значение узла Чили, то есть" boiling1recipe "," boiling2recipe "," roasted1recipe "и" roasted2recipe ".В чем может быть проблема, значит я что-то не так делаю?Пожалуйста, наведите меня, так как я впервые делаю разбор.

1 Ответ

6 голосов
/ 11 апреля 2011

Почему бы вам не пойти с запросом XPath вместо этого?Это было бы проще, и вы могли бы анализировать каждый элемент в цикле.Я не пробовал этот код в вашем XML, но он должен работать:

NSError *error;
NSArray *xmlItems = [ddDoc nodesForXPath:@"//item" error:&error]; // where ddDoc is your DDXMLDocument

for(DDXMLElement* itemElement in xmlItems)
{
    // Here you get the item->value attribute value as string...
    NSString *itemValueAsString = [[itemElement attributeForName:@"value"]stringValue];

    // Now you get the image element from inside the item element
    DDXMLElement *imageElement = [[itemElement nodesForXPath:@"image" error:&error] objectAtIndex:0];

    // And finally the image->value attribute value as string…
    NSString *imageValueAsString = [[imageElement attributeForName:@"value"]stringValue];
}

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...