2014-01-15 33 views
0

我有一個XML文件,上面寫着類似什麼能導致NSXML解析器崩潰?

<html> 
    <head style=""> 
    <style type="text/css"></style> 
    </head> 
    <body style="">current=yes<!--?xml version="1.0" encoding="ISO-8859-1"?--> 
    <results> 
     ... (Some tags and content) 
    </results> 
    </body> 
</html> 

didStartElement方法沒有得到所謂的。由於body標籤後面的文字是否會崩潰?如果是這樣,有沒有辦法在NSXMLParser達到之前更改應用程序中的文件?

解析器在這裏初始化:

NSURL *url  = [NSURL URLWithString:urlString]; 
NSData *data  = [[NSData alloc] initWithContentsOfURL:url]; 
parser   = [[NSXMLParser alloc] initWithData:data]; 
parser.delegate = self; 
[parser parse]; 

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName 
attributes:(NSDictionary *)attributeDict 
{ 
    NSLog(@"Element: %@", elementName); 
    ... 
} 

無元素名稱被輸出。

+0

向我們展示如何創建和使用它。檢查解析器是否正確初始化。 – Kevin

+0

@Kevin添加了解析器初始化。 –

+0

是什麼讓你覺得它崩潰?如果它崩潰。它會降低你的整個應用程序。你是否實現了其他委託方法? – jrturton

回答

0

的解決方案是,有是

<!--?xml version="1.0" encoding="ISO-8859-1"?--> 

標籤之前來到文本。

在另一方面,前述標籤(htmlhead,和body)變成不是文件的一部分,而是由瀏覽器以顯示文件加入。的被解析什麼甲精確的輸出可以通過將NSDataNSString變量和記錄它被創建:

NSURL *url  = [NSURL URLWithString:urlString]; 
NSData *data  = [[NSData alloc] initWithContentsOfURL:url]; 
NSString *strData = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; 
NSLog(@"XMLData: %@", strData); 

該輸出像

current=yes<!--?xml version="1.0" encoding="ISO-8859-1"?--> 
<results> 
    ... (Some tags and content) 
</results> 

,並從這個輸出很容易看到有初始文本導致錯誤。