Невозможно проанализировать и построить вложенные XML-элементы с помощью TouchXML

#iphone #objective-c #touchxml

#iPhone #objective-c #touchxml

Вопрос:

Как использовать TouchXML, когда вложенные элементы отображаются внутри xml? Я хотел бы вложить имена изображений внутри NSArray для словарного ключа @»images», однако что-то не так с кодом:(. Вот структура XML:

 <itemList>
  <item>
    <name>SomeName</name>
    <description>Some description</description>
    <images>
        <image>image1.png</image>
        <image>image5.png</image>
    </images>
  </item>
  <item>
    <name>SomeName</name>
    <description>Some description</description>
    <images>
        <image>image1.png</image>
        <image>image5.png</image>
    </images>
  </item>
</itemList>
 

Вот код синтаксического анализа:

 resultNodes = [itemListParser nodesForXPath:@"//items" error:nil];

NSMutableDictionary *itemDic = [[NSMutableDictionary alloc] init];
itemList = [[[NSMutableArray alloc] init] autorelease];

NSMutableArray *images = [[NSMutableArray alloc] init];

// Loop through the resultNodes to access each items actual data
for (CXMLElement *resultElement in resultNodes) {

    for(int i = 0; i < [resultElement childCount]; i  ) {

        if ([[[resultElement childAtIndex:i] name] isEqualToString:  @"images"]){

            [images removeAllObjects];

            for(int j = 0; j < [[resultElement childAtIndex:i] childCount]; j  ) {

                [images addObject:[[resultElement childAtIndex:j] stringValue]];
            }

            [itemDic setObject:images forKey:[[resultElement childAtIndex:i] name]];

        } else {

            [itemDic setObject:[[resultElement childAtIndex:i] stringValue] forKey:[[resultElement childAtIndex:i] name]];
        }

    }
    [itemList addObject:[[itemDic copy] autorelease]]; 
}
[itemDic release];
[images release];
 

Ответ №1:

Вы не должны перебирать свои узлы вручную. Всегда лучше использовать XPath. Посмотрите на API-интерфейсы TouchXML xpath.

Комментарии:

1. Ну, у меня есть одна жалоба на использование xpath: код становится зависимым от xml при использовании xpath. Я имею в виду, я хотел бы иметь универсальный анализатор кода, который анализирует XML-документ любой глубины (не использует атрибуты). Например, у меня есть 2 xml, которые мне нужно проанализировать. Оба довольно просты: никаких атрибутов, просто список элементов. Но в одном xml каждый элемент может иметь внутренние элементы (дочерние элементы) с именем тега «изображения», а другой — «местоположения». Если я использую xpath, то я жестко кодирую и не смогу использовать этот метод для другого xml.

Ответ №2:

resultNodes = [itemListParser nodesForXPath:@»//item» ошибка: ноль];

не элементы