iPhone如何解析嵌套的xml文件并在tableview中显示

时间:2011-08-17 12:37:08

标签: iphone xml-parsing

我有以下xml文件

<Root>
<propertytype value="Property1">
<property>
<Property_Name>Name</Property_Name>
</defaultValue>
</property>
<property>
<Property_Name>Address</Property_Name>
</defaultValue>
</property>
<property>
<Property_Name>Age</Property_Name>
</defaultValue>
</property>
</propertytype>
<propertytype value="Property2">
<property>
<Property_Name>Cell Number</Property_Name>
</defaultValue>
</property>
<property>
<Property_Name>E-mail</Property_Name>
</defaultValue>
</property>
</propertytype>
</Root>

我需要的是propertytype属性值需要在tableview中显示,每当我点击该值时说“Property1”,相应的元素(Name,Address和Age)需要在其他视图中显示

请帮帮我?

我使用了NSXMLParser,代码粘贴在

下面
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict {



    if([elementName isEqualToString:@"Root"]) {
        //Initialize the array.
        appDelegate.subtype = [[NSMutableArray alloc] init];
        appDelegate.books = [[NSMutableArray alloc] init];




    }
    else if([elementName isEqualToString:@"propertytype"]) {




        sub=[[Subexptype alloc]init];

        //Extract the attribute here.

        sub.bookID=[attributeDict objectForKey:@"value"];

        NSLog(@"Reading id value :%@", sub.bookID);

        }
    else if([elementName isEqualToString:@"property"]) {

        aBook = [[Book alloc] init];


    }




    NSLog(@"Processing Element: %@", elementName);
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

    if(!currentElementValue) 
        currentElementValue = [[NSMutableString alloc] initWithString:string];
    else
        [currentElementValue appendString:string];

    NSLog(@"Processing Value: %@", currentElementValue);

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {



    if([elementName isEqualToString:@"Root"])
        return;

    //There is nothing to do if we encounter the Books element here.
    //If we encounter the Book element howevere, we want to add the book object to the array
    // and release the object.

    if([elementName isEqualToString:@"propertytype"]){


        [appDelegate.subtype addObject:sub];
        [sub release];
        sub=nil;
    }


    else if([elementName isEqualToString:@"property"]){
        [appDelegate.books addObject:aBook];


        [aBook release];
        aBook = nil;
    }
    else
        [aBook setValue:currentElementValue forKey:elementName];



    [currentElementValue release];
    currentElementValue = nil;
}

现在,我可以在tableview中获取类似“Property1”和“Property2”的属性值,每当我点击Property1或Property2时,我都会获得所有元素,如姓名,地址,年龄,电子邮件和手机号码。

但我不想这样,如果我点击Property1,它会显示其名称,地址和年龄等各自的元素,如果我点击property2,它的元素将显示Cell Number和E-mail shuold

请帮助我,我错了

2 个答案:

答案 0 :(得分:0)

您必须创建一个包含Name,Address和Age的类,并且在解析文件后,您必须在NSMutableArray中添加每个对象。 我恳请您解析文件以使用可从http://www.tbxml.co.uk/TBXML/TBXML_Free.html下载的TBXML库 希望找到这个有用的

答案 1 :(得分:0)

使用

XMLReader.h

这将返回一个xml的字典。从那里你可以轻松地提取所需的内容。

NSDictionary *_xmlDictionary = [[NSDictionary alloc] initWithDictionary:[XMLReader dictionaryForXMLData:responseData error:&error]];

从这里检查XMLReader类

http://dcraziee.wordpress.com/2013/05/29/parsing-xml-in-objective-c/