什么能导致NSXML解析器崩溃?

问题描述:

我有一个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

的解决方案是,有是

<!--?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> 

,并从这个输出很容易看到有初始文本导致错误。