Это код, который я использую для получения атрибута пользователя. Это работает.
NSString* path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:path];
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData
options:0 error:&error];
NSArray *userElements = [doc.rootElement elementsForName:@"user"];
for (GDataXMLElement *userEl in userElements) {
// Attribute
NSString *attribute = [(GDataXMLElement *) [userEl attributeForName:@"id"] stringValue];
NSLog(@"attribute for user is %@", attribute);
// Name
NSArray *names = [userEl elementsForName:@"name"];
if (names.count > 0) {
GDataXMLElement *name = (GDataXMLElement *) [names objectAtIndex:0];
NSLog(@"name for user is %@", name.stringValue);
}
// Rank
NSArray *ranks = [userEl elementsForName:@"rank"];
if (ranks.count > 0) {
GDataXMLElement *rank = (GDataXMLElement *) [ranks objectAtIndex:0];
NSLog(@"rank for user is %@", rank.stringValue);
}
// Do the same for other tags...
}
[doc release];
[xmlData release];
Файл test.xml является тем же самым, который вы извлекаете из ответа xml. Поэтому вам нужно изменить вторую строку этого фрагмента кода. Может быть, вы можете вызвать initWithData
метод класса NSData
.
Вы можете разместить этот код там, где хотите. Может быть, вы можете создать другой класс, который работает как централизованный парсер. Надеюсь, это поможет
EDIT
Поставьте эти две строки перед инструкциями.
NSString *valAttribute = [(GDataXMLElement *) [doc.rootElement attributeForName:@"value"] stringValue];
NSLog(@"value attribute for result is %@", valAttribute);
Объяснение довольно простое. С doc.rootElement
вы получаете весь XML-документ, от <result>
до </result>