【问题标题】:NSXmlParser doesn't work in iphone sdk 3.0NSXmlParser 在 iphone sdk 3.0 中不起作用
【发布时间】:2010-12-15 19:01:48
【问题描述】:

我注意到 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,描述:(null),行:1,列:60

这是第一行

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

【问题讨论】:

  • 也许发布一些代码并具体说明问题所在。我没有使用过 NSXMLParser,但是我在 sdk 3.x 中使用了 libxml(它基于它)没有问题。
  • NSXMLParser 对于 2.2.1 和 3.0 SDK 对我来说都可以正常工作
  • 什么是parserError,两个固件版本都一样吗?
  • 您的 XML 文件的第 1 行第 60 列是什么字符?

标签: iphone nsxmlparser


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我的 xml 文件包含错误

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

    【讨论】:

      【解决方案3】:

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

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

      山姆

      【讨论】:

        【解决方案4】:

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

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

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

        您可能想看看这个 StackOverflow 主题:
        parsing HTML on the iPhone

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-06
          • 2010-11-02
          • 1970-01-01
          • 2010-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-16
          相关资源
          最近更新 更多