什么能导致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);
...
}
无元素名称被输出。
答
的解决方案是,有是
<!--?xml version="1.0" encoding="ISO-8859-1"?-->
标签之前来到文本。
在另一方面,前述标签(html
,head
,和body
)变成不是文件的一部分,而是由浏览器以显示文件加入。的被解析什么甲精确的输出可以通过将NSData
成NSString
变量和记录它被创建:
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>
,并从这个输出很容易看到有初始文本导致错误。
向我们展示如何创建和使用它。检查解析器是否正确初始化。 – Kevin
@Kevin添加了解析器初始化。 –
是什么让你觉得它崩溃?如果它崩溃。它会降低你的整个应用程序。你是否实现了其他委托方法? – jrturton