2011-07-04 53 views
0

我使用这个XML文件: http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/toppaidapplications/limit=10/xmlXML解析器:与苹果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 

我已经使用了与他人X是解析器类ML文件和它的工作,但现在与Apple XML文件不......为什么?

+0

你需要发布更多的'parser:foundCharacters:'和'parser:didEndElement:namespaceURI:qualifiedName:'的实现。你在'parser:foundCharacters:'中找到了哪些HTML元素?你应该意识到我们不是能够在你的Mac上神奇地阅读你的代码的心理学家! – Yuji

+0

是的,对不起。我编辑了代码。 – jlink

+0

HTML元素与XML文件的代码源相同,但使用Safari ... – jlink

回答

2

如果因为XML构建,您使用它之前,你可以修剪的方式所需的内容之前,有很多空白,

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

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


至于你的问题有关 parser:foundCharacters:the documentation状态这一点,

由解析器对象发送到提供其 代表与代表 所述的字符的全部或部分的字符串当前元素。

所以你不应该期望它打印整个XML。它会给你点点滴滴。

+0

我试过了,但我没有工作。结果是一样的... – jlink