Я довольно новичок в NSXMLParser, и мне нужен совет. Вот моя ситуация:
Я отправляю SOAP-запрос на сервер, чтобы получить список «Заказов», которые возвращают список заказов в следующем формате:
<Order>
<OrderID> string </OrderID>
<OrderName> string </OrderName>
</Order>
Итак, я анализирую xml с кучей этих Приказов и заполняю свой изменчивый nsarray изменяемыми словарями, так что в итоге это выглядит так:
(
{
OrderID = 2011417335319;
OrderNumber = 100;
},
{
OrderID = 2011340029503;
OrderNumber = TestOrder3;
},
{
OrderID = 20113223404613;
OrderNumber = 1234;
},
{
OrderID = 20113692554635;
OrderNumber = EricOrder;
},
{
OrderID = 2;
OrderNumber = TestOrder2;
},
{
OrderID = 201144231410461;
OrderNumber = TestOrder4;
}
)
Теперь для каждого из этих ордеров (на основе идентификатора ордера) мне нужно отправить еще один запрос, который вернет список единиц. Объекты имеют свойство «Номер и имя объекта». Теперь это где я запутался. После разбора ордера, как мне, для каждого из полученных ордеров:
- Отправить запрос SOAP
- Получив ответ, создайте NSXMLParser
- и затем проанализируйте его.
Как я могу сделать это динамически? При разборе порядка все было просто, так как мне просто нужно было сделать это:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"GetOrdersResult"]) {
if (array) {
[array release];
}
array = [[NSMutableArray alloc] init];
} else if ([elementName isEqualToString:@"Order"]) {
if (dict) {
[dict release];
}
dict = [[NSMutableDictionary alloc] initWithCapacity:2];
} else if ([elementName isEqualToString:@"OrderID"]) {
sections = E_OrderID;
} else if ([elementName isEqualToString:@"OrderNumber"]) {
sections = E_OrderNumber;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (sections == E_OrderID) {
[dict setObject:string forKey:@"OrderID"];
} else {
[dict setObject:string forKey:@"OrderNumber"];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"Order"]) {
[array addObject:dict];
}
}
Но теперь будет запущено несколько NSXMLParsers одновременно, поэтому я немного смущен тем, как мне это сделать.
Кроме того, быстрый вопрос. У меня также есть запрос, который возвращает около 2000 элементов с большим количеством подэлементов. Каков наилучший способ сохранить это в памяти, выполнить поиск по нему, а затем заполнить nstableview?
Спасибо.