2011-07-04 77 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