Получение атрибутов Child и Subchild с использованием NSXmlParser
Это моя структура XML....
<course>
<Topic Name="Child1">
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
</Topic>
<Topic Name="Child2">
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
</Topic>
<Topic Name="Child3">
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
</Topic>
</course>
Прямо сейчас я использую этих трех делегатов
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
{
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
}
Я могу получить данные внутри узла с помощью этих делегатов..... Но я не знаю, как получить атрибуты дочерних и дочерних элементов.
2 ответа
Решение
Во -первых, ваш xml неверен, это должно быть так. Я должен проверить это по этой ссылке
http://www.w3schools.com/xml/xml_validator.asp
Тег закрытия не существует для подтемы. XML должен быть таким.
<Topic Name="Child2">
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
</Topic>>
<Topic Name="Child3">
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
<subtopic Name="Subchild"> </subtopic>
</Topic>
Инициализируйте topicArray и subTopicArray (NSMutableArrays) в методе viewDidLoad. возьмите BOOL searchDone в заголовочном файле.
Для разбора XML:-
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if ([elementName isEqualToString: @"Topic"] ){
if ([attributeDict objectForKey:@"Name"] isEqualToString:@"Child2"); {
searchDone=YES;
}
else {
searchDone=NO;
}
}
if ([elementName isEqualToString: @"subtopic"]){
if (searchDone==YES)
{
[subTopicArray addObject:[attributeDict objectForKey:@"Name"]];
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"Child2 subtopic data %@",subTopicArray);
}
Если вы говорите о получении значения для ключа "Имя" каждого тега XML, они передаются вам в параметре attributeDict parser:didStartElement:namespaceURI:qualifiedName:attributes:
метод делегата...