Получение атрибутов Child и Subchild с использованием NSXmlParser - PullRequest
1 голос
/ 08 декабря 2011

Это моя структура 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 ]

1 голос
/ 08 декабря 2011

Прежде всего, ваш 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);

        }
0 голосов
/ 08 декабря 2011

Если вы говорите о получении значения для ключа «Имя» каждого тега XML, они передаются вам в параметре attributeDict метода делегата parser:didStartElement:namespaceURI:qualifiedName:attributes: ...

...