解析使用NSXML XML为iPhone

问题描述:

我有具有这样的结构的XML:解析使用NSXML XML为iPhone

<data> 
    <books> 
     <item> 
      <title>book1</title> 
      <author>author1</author> 
     </item> 
     <item> 
      <title>book2</title> 
      <author>author2</author> 
     </item> 
    </books> 
    <magazines> 
     <item> 
      <title>Mag1</title> 
      <author>author1</author> 
     </item> 
    </magazines> 
    <journals> 
     <item> 
      <title>Journal1</title> 
      <author>author1</author> 
     </item> 
     <item> 
      <title>Journal2</title> 
      <author>author2</author> 
     </item> 
    </journals> 
</data> 

我使用的是表视图,以显示每个类别的项目。我打算用列表书籍,杂志&和点击它们应该只显示它​​们下面的项目。也就是说,如果我点击书籍,它应该只显示书籍条目。

我有这样的XML解析

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

    if ([elementName isEqual:@"books"]) { 
     flag=1; 
    } 

    if ([elementName isEqual:@"title"]) { 
     NSLog(@"found title!"); 
     parsedString = [[NSMutableString alloc] init]; 
    } 
    if ([elementName isEqual:@"author"]) { 
     NSLog(@"description found"); 
     parsedString = [[NSMutableString alloc] init]; 
    } 

} 

- (void)parser:(NSXMLParser *)parser 
didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName 
{ 
    if (flag==1){ 
    if ([elementName isEqual:@"title"]) { 
     [headlines addObject:parseString]; 

     [parseString release]; 
     parseString = nil; 
    } 

    if ([elementName isEqual:@"author"]) { 
     [authors addObject:parsedString]; 
     [parseString release]; 
     parseString = nil; 
     flag=2; 
     } 
    } 
} 

但这只能得到的书,没有其他的第一项。 而不是设置标志有没有办法解析<书籍>和 < /书籍>标签?

谢谢。

- (void)parser:(NSXMLParser *)parser 
didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqual:@"books"]) { 
     [parser abortParsing]; 
    } 

    .... 
} 

只是取消解析。我怀疑你会得到更接近你想要什么,如果你更新的图书标签结束元素此标志,如下所示:

- (void)parser:(NSXMLParser *)parser 
didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName 
{ 
    if (flag==1){ 
    if ([elementName isEqual:@"title"]) { 
     [headlines addObject:parseString]; 

     [parseString release]; 
     parseString = nil; 
    } 

    if ([elementName isEqual:@"author"]) { 
     [authors addObject:parsedString]; 
     [parseString release]; 
     parseString = nil; 
    } 
    if ([elementName isEqual:@"books"]) { 
     flag=2; 
    } 
    } 
} 
+0

如果你想拿到书部分,这恰好这种做法只会工作如在示例中那样在XML中是第一个。但是,如果你想用相同的逻辑来检索“杂志”和“杂志”版块,那么它就没有多大帮助。 –

+0

我现在试过了。点击我的tableview中的单元格会出现一个显示作者姓名的屏幕。它工作正常,但当我回到表视图并再次单击该项目时,它崩溃。 基本上,我试图做的只是解析书中的标签,只解析杂志内的标签等。所以,如果我解析杂志,它不应该解析书籍和杂志下的标签。 – Bharat

+0

@蒂姆迪恩,我知道。 – Max

的原因,它仅获得第一个项目就是要设置标志2,当你看到笔者标签结束元素:当图书标签结束

+0

这工作。我能够单独分离书籍。 – Bharat