В моем приложении я разбираю xml, из которого я получаю список предметов (гостиниц и ресторанов), которые я ввел в массив «listElements»; Мне нужно получить от этого массива, другой массив, который будет содержать только определенные элементы (только отели), а затем мне нужно добраться из этого массива, трех массивов, которые будут содержать отели по звездам (array5starhotel, array4starhotel, array3starhotel). Как это можно сделать? Это код, который я использовал для разбора (я использовал TBXML):извлечение данных из NSMutableArray
- (void)loadCategories {
// instantiate an array to hold categories objects
listCategories = [[NSMutableArray alloc] initWithCapacity:100];
tbxml = [[TBXML tbxmlWithXMLFile:@"Molise.xml"] retain];
// Obtain root element
TBXMLElement * root = tbxml.rootXMLElement;
// if an author element was found
if (root) {
//search for the first category element within the root element's children
TBXMLElement * category = [TBXML childElementNamed:@"category" parentElement:root];
// if a category element was found
while (category != nil) {
// instantiate a category object
Category * aCategory = [[Category alloc] init];
// get the name attribute from the category element
aCategory.name = [TBXML valueOfAttributeNamed:@"name" forElement:category];
// search the category's child elements for a "element" element
TBXMLElement * element = [TBXML childElementNamed:@"element" parentElement:category];
// if a "element" element was found
while (element != nil) {
// instantiate a "element" object
Element * aElement = [[Element alloc] init];
// extract the attributes from the "element" element
aElement.title = [TBXML valueOfAttributeNamed:@"title" forElement:element];
aElement.address = [TBXML valueOfAttributeNamed:@"address" forElement:element];
aElement.stars =[TBXML valueOfAttributeNamed:@"stars" forElement:element];
// add the "element" object to the category's listElements array and release the resource
[aCategory.listElements addObject:aElement];
[aElement release];
// find the next sibling element named "element"
element = [TBXML nextSiblingNamed:@"element" searchFromElement:element];
}
// add our category object to the listCategories array and release the resource
[listaCategories addObject:aCategory];
[aCategory release];
// find the next sibling element named "category"
category = [TBXML nextSiblingNamed:@"category" searchFromElement:category];
}
[tbxml release];
}
Я объясню, что лучше в классе Category создается экземпляр «name» (category.name) и массив listElement (category.listElement); в элементе класса создаются три строки: название, описание, звезды (element.title, element.stars element.description.) Причина, по которой я спросил, как сделать три массива, заключается в том, что когда я нажимаю на категорию отеля, мне нужно показать отели по звездам в трех разных разделах таблицыView – Claudio
ОК, вторая часть моего кода будет проходить через один объект категории и получить три требуемых массива. – deanWombourne
dean У меня проблема с вашим кодом, в трех массивах всегда загружается один и тот же отель (первый из дерева XML), на самом деле в трех разделах табличного представления я получаю тот же отель, когда они должны появляться три разных – Claudio