【问题标题】:how to parse the attributes like in this xml file through xml parser如何通过xml解析器解析这个xml文件中的属性
【发布时间】:2012-06-08 07:03:35
【问题描述】:

XML 文件代码:

  <Books>
  <Book id="1" isbn="123456">
  <name>Let Us C</name>
  <authors>
  <author>Yashwant Kanetkar</author>
  <author>ABC</author>
  </authors>
  <price>250.00</price>
  </Book>
  <Book id="2" isbn="345678">
  <name>Programing With C++</name>
  <authors>
  <author>Balaguruswamy</author>
  <author>XYZ</author>
  </authors>
  <price>400.00</price>
  </Book>
  <Book id="3" isbn="789012">
  <name>Professional iPhone and iPad Application Development</name>
  <authors>
  <author>Gene Backlin</author>
  <author>QWE</author>
  </authors>
  <price>550.00</price>
  </Book>
  <Book id="4" isbn="901234">
  <name>Beginning iOS 4 Application Development</name>
  <authors>
  <author>Wei-Meng Lee</author>
  <author>IOP</author>
  </authors>
  <price>500.00</price>
  </Book>
  </Books>

谁能帮我解决这个问题?

我正在使用此代码:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
    if([elementName isEqualToString:@"Books"]) 
    {
        appDelegate.books = [[NSMutableArray alloc] init];
    }
    else if([elementName isEqualToString:@"Book"]) 
    {
        aBook = [[Book alloc] init];
        aBook.bookID = [[attributeDict objectForKey:@"id"] integerValue];
        aBook.isbn = [[attributeDict objectForKey:@"isbn"] integerValue];
        NSLog(@"Reading isbn value : %@", aBook.isbn);
        NSLog(@"Reading id value :%i", aBook.bookID);
    }
    NSLog(@"Processing Element: %@", elementName);
}

【问题讨论】:

    标签: iphone xml-parsing


    【解决方案1】:

    首先取一个布尔变量。然后编写以下代码。也许对你有帮助,我几天前已经完成了相关工作。

    第一个 .h 文件

    @interface EventsViewController : UIViewController <NSXMLParserDelegate>
    {
        NSMutableArray *_idArray;
        NSMutableArray *_isbnArray;
        BOOL isBook;
    }
    

    然后在 .m 文件中你应该写这个。

    //在ViewDidLoad中

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        _idArray = [[NSMutableArray alloc] init];
        _isbnArray = [[NSMutableArray alloc] init];
        
        NSString *xmlString = [[NSBundle mainBundle] pathForResource:@"today_in_history_short" ofType:@"xml"];
        NSURL * fileURL = [NSURL fileURLWithPath:xmlString];
        NSXMLParser * parser = [[NSXMLParser alloc] initWithContentsOfURL:fileURL];
        [parser setDelegate:self];
        [parser parse];
    }
    

    // 现在在 xml 解析器委托方法中

    pragma mark - NSXMLParser 委托方法

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
        
        if ([elementName isEqualToString:@"Books"]) {
            isBook = YES;
        }
        else if ([elementName isEqualToString:@"Book"] && isBook){
            NSString *idString = [attributeDict objectForKey:@"id"];
            NSString *isbnString = [attributeDict objectForKey:@"isbn"];
            [_idArray addObject:idString];
            [_isbnArray addObject:isbnString];
            NSLog(@"Book id is: %@ and Book isbn is: %@",idString,isbnString);
        }
    }
    
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    }
    
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
        
        if ([elementName isEqualToString:@"Books"]) {
            isBook=NO;
            NSLog(@"Id Array count is :%d",[_idArray count]);
        }
    }
    

    注意:我已经检查过了,它正在工作,你可以在你的代码中使用它,如果它仍然不能工作,那么你的项目中会有其他问题,你可以通过单独的项目来验证它。

    【讨论】:

    • 不工作...!应用此代码后,甚至其他内容都不会显示...!
    • 应该可以,在类级别定义以上三行。和 if/else 在 start 方法中。
    • 通过电子邮件将您的代码发送至“khalid0491@gmail.com”,我将为您编写代码。
    • 我已经做到了。阅读您的 xml 文件并显示打印数据,它正在工作。我将更新我的答案。如果它真的对你有帮助,请接受并投票。
    • 检查一下,如果它没有帮助你,那么我会 wdit 你的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多