0

我在 sdk 3.0 中发现了一个奇怪的问题。当我解析 XML 时,在任何 sdk 2.x 中一切正常,但 sdk 3.0 却不行。

我没有发现 NSXMLParser 有任何区别,但是任何 2.x sdk 都可以正常工作,而 3.0 则不行。如果有人遇到这样的问题并告诉我如何解决它?-> rssParser 是 NSXmlParser 对象。

在 SDK 3.0 中

我称之为这个方法。[rssParser parse];

那么我的解析器调用的第一个方法就是这个

  • (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError

之后它什么也不做。

当我选择 sdk 2.2.1

然后它也调用这个方法

  • (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError

但解析器不会停止解析它会继续调用 NSXmlParser 的其他代表。

两者的解析错误相同

错误 65,描述:(空),行:1,列:60

这是第一行

!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 两端带有 < >

4

4 回答 4

3

好吧,您正在尝试使用 NSXMLParser 解析 HTML 文件。NSXMLParser 需要一个有效的 XML 文件,而 HTML 文件不是有效的 XML 文件,它们可能是,但几乎所有都不是。例如,文档类型不是有效的 XML。您为工作使用了错误的“工具”。

我不知道它在 3.x 上不起作用但在 2.x 上起作用的原因,看来毕竟行为发生了变化。

我建议使用 libxml2 来解析 HTML 文件,而不是 NSXMLParser。Libxml2 可用于解析“真实世界”的 HTML。

您可能想查看这个 StackOverflow 主题:
在 iPhone 上解析 HTML

于 2009-11-12T10:10:16.247 回答
1

实际上问题是在 3.0 NSXmlparser 中受到更多限制,它不会解析 3.0 中包含任何错误的任何文件。Yannick Compernol 给出的答案是正确的。解决我使用 libxml2 的问题。您可以查看此链接以获取代码用于解析

http://cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html

于 2009-11-27T04:02:47.233 回答
0

听起来你的 xml 中有一个错误,2.x 解析器可以通过,但 3.0 解析器更严格并停止。

您可以发布导致此错误的最小 xml 吗?

山姆

于 2009-11-12T10:11:13.347 回答
0

我的 xml 文件包含错误

删除后,问题解决。我不知道为什么它在 OS 2.2.1 中对 NSXMLParser 工作正常。可能是 xml 文件中的忽略错误。

于 2009-11-26T09:47:25.553 回答