Я пишу пользовательский десериализатор xml для приложения iphone.Как вы можете видеть ниже, я перебираю все элементы списка в xml, отлаживаю его, и с каждым циклом появляется новый и новый элемент.Проблема в том, что вспомогательные методы xpath (есть методы, аналогичные приведенным ниже, но для int и decimal) всегда возвращают одно и то же значение.
Например - значение xml «SomeValue» 1-го цикла будет «abc», а вспомогательный метод вернет «abc», второй элемент появится, а его «SomeValue» xml - «XYZ», но вспомогательный методбудет по-прежнему возвращать «abc».
Я новичок в управлении iphone / target c / memory, так что это может быть любое количество вещей.Я просто не могу определить, в чем проблема :( может кто-нибудь предложить какую-нибудь помощь?
-(void) deserializeAndCallback:(GDataXMLElement *)response
{
NSError * error;
NSArray *listings = [response nodesForXPath:@"//ListingSummary" error:&error];
NSMutableArray *deserializedListings = [[NSMutableArray alloc] init];
//loop through all listing elements, create a new listing object, set its values, and add
//it to the list of deserialized objects.
if(listings.count > 0)
{
for (GDataXMLElement *listingElement in listings)
{
Listing *list = [[Listing alloc] init];
//xpath helper function (shown below), just to get the value out of the xml
list.someValue = [QuickQuery getString:listingElement fromXPath:@"//SomeValue"];
[deserializedListings addObject:list];
}
}
if([super.delegate respondsToSelector: @selector(dataReady:)])
{
[super.delegate dataReady:deserializedListings];
}
}
+(NSString *) getString:(GDataXMLElement *)element fromXPath:(NSString *)xPath
{
NSError *error;
NSArray *result = [element nodesForXPath:xPath error:&error];
if(result.count > 0)
{
GDataXMLElement *singleValue = (GDataXMLElement *) [result objectAtIndex:0];
return singleValue.stringValue;
[singleValue release];
}
return nil;
[error release];
[result release];
}
РЕДАКТИРОВАТЬ: хорошо ... Я нашел немного больше информации. Внутри вспомогательной функции, nodeForXpath метод возвращает всеузлы всего xml, а не только текущий элемент, с которым я занят. GDataXMLElement вообще хранит ссылку на свои родительские элементы?
Пример того, как xml выглядит
<ListingSummary>
<SomeValue>abc</SomeValue>
</ListingSummary>
<ListingSummary>
<SomeValue>jhi</SomeValue>
</ListingSummary>
<ListingSummary>
<SomeValue>xyz</SomeValue>
</ListingSummary>