NSXMLParser与HTML包含Javascript和“坏”字符

问题描述:

我正在使用NSXMLParser从网站解析HTML。测试网站是在我的控制之下,但在运营网站将不会。NSXMLParser与HTML包含Javascript和“坏”字符

问题是解析器遇到包含“坏”字符的javascript。例如,包含if(screen.width<=521)的javascript。问题是代码中的<。我可以看到问题,但不确定是否有任何好的方法。 (NSXMLParser报告NSXMLParserErrorDomain错误68.我可以看到为什么 - 它将< =视为新标记的开始,但=不是有效标记名称字符...)。但是,我会怎样处理if(var<20)

我其实对特定的内容不感兴趣,所以可以做全局替换/删除等操作。 “< =”和“> =”(等等),但在某些方面,由于我使用NSXMLParser来避免开始搞乱内容,因此看起来有点混乱。如果替代是最好的前进方向,我可以设想“< =”和“> =”但我应该包括其他任何序列?

我是可可的新手,所以可能很容易遗漏一些明显的东西 - 在这种情况下很多道歉。我确实看到其他人也发现了类似的问题,但从问题中找不到一个好的方法。

我正在处理错误确定(以一种整洁的方式),但它阻止了我的应用程序执行它的任务 - 即我需要避免错误而不是处理它。

背景:该应用程序正在对html进行“之前”和“之后”比较并寻找更改。我可以将“< =”换成非常奇怪的东西,然后在必要时将其换回。我甚至可以首先检查替换内容的数据以消除可能的歧义(例如,在下载的页面中找不到UID序列,用UID序列替换“< =”,如果需要,解析页面,用“< =”代替UID ,同上,用于“> =”。

(我看过的libxml2的如libtidy却找不到方便的文档和很警惕,推出下来这样的途径,如果不解决这个问题。)

NSXMLParser,顾名思义,并不意味着解析HTML,XML比HTML更严格,并且你遇到的错误当然不是唯一可以用真实世界的HTML的东西,还有HTML文档也是有效的XML ,但这是例外,而不是规范。

我建议使用合适的HTML解析器,例如this one,它是围绕libxml的HTML解析函数的Objective-C包装。

+0

非常感谢。我查看并尝试了您链接的代码,但它帮助了很多,但与我的应用程序尝试执行的操作并不相符。更重要的是,解析libxml2中的树不适合我的应用程序在做什么。 – 2012-07-29 13:13:21

+0

非常感谢。我查看并尝试了您链接的代码,但它帮助了很多,但与我的应用程序尝试执行的操作并不相符。更重要的是,解析libxml2中的树不适合我的应用程序在做什么。但是,libxml2中的SAX解析器确实很适合(HTML版本)。我看到很多关于可怜的libxml2文档的评论,它看起来确实如此。但是,在你连接的代码中,在调试器中进行一些测试工作时,它并不像起初出现的那么糟糕(对于SAX解析尤其如此)。 – 2012-07-29 13:20:59

+0

从初学者的角度来看,仍然让我在libxml2的树型输出中困惑的一个方面是标签下面的节点,称为“text”和“entity refs” - 特别是当您的标签具有内容时。当然,当我切换到SAX处理器时,这变成了一个非问题,但如果libxml2人员对该树进行了更多解释(示例树标记打印有点直截了当),它可能会对初学者有所帮助 - 但它们已经完成了免费的优秀工作,所以评论意味着更多的是“锦上添花”。 – 2012-07-29 13:22:29