是什么导致NSXML Parser崩溃?

时间:2014-01-15 21:09:56

标签: ios xml parsing nsxmlparser

我有一个类似

的xml文件
<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);
    ...
}

不输出任何元素名称。

1 个答案:

答案 0 :(得分:0)

解决方案是在

之前有文字
<!--?xml version="1.0" encoding="ISO-8859-1"?-->

标签。

另一方面,前面的标记(htmlheadbody)不属于文件,但是由浏览器添加以显示文件。通过将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>  

并且从该输出中很容易看出存在导致错误的初始文本。