首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSXML for iPhone解析XML语言

使用NSXML for iPhone解析XML语言
EN

Stack Overflow用户
提问于 2011-11-09 07:16:06
回答 2查看 279关注 0票数 0

我有一个XML,它的结构如下:

代码语言:javascript
复制
<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>

我使用表视图来显示每个类别的项目。我计划有一个表视图与列书籍,杂志和期刊,在他们上点击应该只显示他们下面的项目。也就是说,如果我单击books,它应该只显示图书条目。

我有一个用于xml解析的代码

代码语言:javascript
复制
- (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];
    }

}

和在

代码语言:javascript
复制
- (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;
        }
    }
}

但这只获得了书籍的第一个条目,而没有其他内容。有没有一种方法可以只在和标签之间进行解析,而不是设置标志?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2011-11-09 09:08:29

它只获取第一个项目的原因是,当您看到author标记的end元素时,将flag设置为2。我怀疑,如果您在book标记的end元素中更新此标记,您将更接近您想要的内容,如下所示:

代码语言:javascript
复制
- (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;
    }
  }
}
票数 1
EN

Stack Overflow用户

发布于 2011-11-09 08:37:48

只需在book标记结束时取消解析:

代码语言:javascript
复制
- (void)parser:(NSXMLParser *)parser
 didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI
 qualifiedName:(NSString *)qName
{  
    if ([elementName isEqual:@"books"]) {
        [parser abortParsing];
    }

    ....
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8058392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档