DaffodilGirl 2012-11-16 03:06 采纳率: 0%
浏览 2214
已采纳

iPhone中解析XML遇到的问题

新手求助,遇到了解析XML的问题:

XML:

<?xml version="1.0" encoding="UTF-8"?>
<Books>
    <Book id="1">
    <title_1>Circumference</title_1>
    <author>Nicholas Nicastro</author>
    <summary>Eratosthenes and the Ancient Quest to Measure the Globe.</summary>
</Book>
    <Book id="2">
    <title_1>Copernicus Secret</title_1>
    <author>Jack Repcheck</author>
    <summary>How the scientific revolution began</summary>
</Book>
    <Book id="3">
    <title_1>Angels and Demons</title_1>
    <author>Dan Brown</author>
    <summary>Robert Langdon is summoned to a Swiss research facility to analyze a cryptic symbol seared into the chest of a murdered physicist.</summary>
</Book>
    <Book id="4">
    <title_1>Keep the Aspidistra Flying</title_1>
    <author>George Orwell</author>
    <summary>A poignant and ultimately hopeful look at class and society, Keep the Aspidistra Flying pays tribute to the stubborn virtues of ordinary people who keep the aspidistra flying.</summary>
</Book>
</Books>

代码:

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

    if([elementName isEqualToString:@"Books"])
    {
        data_array = [[NSMutableArray alloc] init];
    }
    else if([elementName isEqualToString:@"Book"])
    {

        bookID= [[attributeDict objectForKey:@"id"]integerValue];

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


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

}

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


    if(!test_string)
    {
        test_string = [[NSMutableString alloc] initWithString:string];
}
    else
    {
        [test_string appendString:string];
    }
    //NSLog(@"Processing Value: %@",test_string);

}

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

    if([elementName isEqualToString:@"Books"])

        return;

    if ([elementName isEqualToString:@"Book"])
    {
        [data_array addObject:test_string];


    }
   else

    test_string = nil;
        }

实现之后就会跳到第一本书,并且只显示最后三本书。

如果加上test_string=nil就会显示作者的名字。

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

    if([elementName isEqualToString:@"Books"])

        return;

    if ([elementName isEqualToString:@"Book"])
    {
        [data_array addObject:test_string];

        test_string = nil;
        // data_array = nil;
    }

        }

而且在我的tableview中还会出现空格。

  • 写回答

1条回答 默认 最新

  • prettYYoyic 2012-11-16 07:07
    关注

    修改didStartElement方法:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
     namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
        attributes:(NSDictionary *)attributeDict {  
    
        if([elementName isEqualToString:@"Books"])
        {
            data_array = [[NSMutableArray alloc] init];
        }
        else if([elementName isEqualToString:@"Book"])
        {
    
            bookID= [[attributeDict objectForKey:@"id"]integerValue];
            test_string = nil;
            NSLog(@"Reading id value :%d",bookID);
    
        }
        else if([elementName isEqualToString:@"title_1"])
        {
           test_string = [[NSMutableString alloc] init];
        }
    }
    

    再修改didEndElement:

    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
      namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    
        if([elementName isEqualToString:@"Books"])
    
            return;
    
        if ([elementName isEqualToString:@"title_1"])
        {
            [data_array addObject:test_string];
    
            test_string = nil;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集