#iphone #xml #ios #nsxmlparser
#iPhone #xml #iOS #nsxmlparser
Вопрос:
Итак, я знаю, как анализировать некоторые структуры XML, но в настоящее время я пытаюсь проанализировать эту конкретную структуру xml, которая немного отличается от той, к которой я привык.
обычно я бы проанализировал что-то вроде
<xml>
<data>
<name>Forrest</name>
<age>25</name>
<username>forrestgrant</username>
</data>
</xml>
Но теперь я работаю с некоторым xml, например..
<xml>
<data name="Forrest" age="25" username="forrestgrant" />
<other value="6" />
</xml>
как мне получить доступ к этим переменным, если они структурированы таким образом?
Вот как я обычно подхожу к этой задаче, которая заключается в поиске тегов заголовка и получении данных из каждого.. однако сейчас я пытаюсь выяснить, как анализировать этот другой стиль xml.
- (void)startTheParsingProcess:(NSData *)parserData
{
[myDataArray release]; // clears array for next time it is used.
myDataArray = [[NSMutableArray alloc] init]; //initalizes the array
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //incoming parserDatapassed to NSXMLParser delegate which starts parsing process
[parser setDelegate:self];
[parser parse]; //Starts the event-driven parsing operation.
[parser release];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqual:@"item"]) {
// NSLog(@"Found title!");
itemString = [[NSMutableString alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
[itemString appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqual:@"item"]) {
//NSLog(@"ended title: %@", itemString);
[myDataArray addObject:itemString]; //this is where i pass the values over to my array.
[itemString release];
itemString = nil;
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
// Passes myDataArray to the method that will sort and display the array into a uitableview.
[self startSortingTheArray:myDataArray];
}
любая помощь будет с благодарностью принята..
Ответ №1:
Приведенные выше XML-данные предоставляют данные в виде атрибутов для элемента xml.
Этот метод обратного вызова предоставляет вам доступ к атрибутам в виде словаря ключевых значений (attributeDict).
(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
NSLog словарь в этом методе, чтобы увидеть значения:
NSLog(@"attributes: %@", attributeDict);
Комментарии:
1. хорошо.. Круто, я это понимаю.. Я мог бы просто пойти и прочитать NSDictionaries сейчас .. на самом деле пока их вообще не использовал.
2. словарь — это просто набор ключей и значений. У вас должен быть ключ для каждого атрибута и значение для каждого значения этого ключа. Получайте удовольствие 🙂
3. да, у меня есть общее представление о них, но мне нужно немного почитать их, прежде чем я попытаюсь сделать что-нибудь сумасшедшее! 🙂 спасибо за помощь! очень признателен
Ответ №2:
В вашем didStartItem:
методе attributes
словарь будет содержать значения для всех атрибутов XML.