XML Parser:Apple XML的麻烦

时间:2011-07-04 15:57:46

标签: objective-c nsxmlparser

我正在使用这个xml文件: http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/toppaidapplications/limit=10/xml

来自apple.com/rss的

并使用经典代码来解析它......

第一件奇怪的事情,当我记录下来时:

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

NSLog(@"string : %@",string);

if (!currentElementValue) {
    // init the ad hoc string with the value     
    currentElementValue = [[NSMutableString alloc] initWithString:string];
} else {
    // append value to the ad hoc string
    [currentElementValue appendString:string];

}

}

我得到了一些HTML元素!但是,当您查看页面代码时,FireFox会显示完整的XML文档!

然后......当我试图从任何标签中获取一些信息时,我在预期值之前添加了很多空格和换行元素......

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



    // Check tag name

    if ([elementName isEqualToString:@"title"]) {
        NSString *trimmedString = [currentElementValue stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        [currentElementValue setString:trimmedString];
        NSLog(@" title: %@",currentElementValue);
        [app setAppName:currentElementValue];
    }


    // Check tag
    if ([elementName isEqualToString:@"entry"]) {

        [apps addObject:app];

        // release user object
        [app release];
        app = nil;

    }


    [currentElementValue release];
    currentElementValue = nil;

}

返回例如:

  

标题:

                Angry Birds - Clickgamer.com

我已经将该解析器类与其他XML文件一起使用了它,但是现在使用Apple XML文件它没有...为什么?

1 个答案:

答案 0 :(得分:2)

如果由于构造XML的方式在所需内容之前存在大量空格,则可以在使用之前对其进行修剪,

   ....
if ([elementName isEqualToString:@"title"]) {
    NSString * trimmedString = [currentElementValue stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    NSLog(@" title: %@",trimmedString);
    [app setAppName:trimmedString];
}
   ....

<小时/> 至于您关于parser:foundCharacters:的问题,the documentation说明了这一点,

  

由解析器对象发送以提供它   委托用字符串表示   全部或部分角色   当前元素。

所以你不应该指望它打印整个XML。它会给你一些零碎的东西。