我正在使用NSXMLParser来解析网站上的HTML。测试站点在我的控制之下,但在操作站点不会。
问题是当解析器遇到包含“坏”字符的javascript时。例如,包含if(screen.width<=521)
的javascript。问题是&lt;在代码中。我可以看到问题,但不确定是否有任何好的方法。 (NSXMLParser报告NSXMLParserErrorDomain错误68.我可以看到原因 - 它将&lt; =视为新标记的开头,但=不是有效的标记名称字符...)。但是接下来我会做什么呢? if(var<20)
?
我实际上对特定内容不感兴趣,因此可以执行全局替换/删除等内容。 “&lt; =”和“&gt; =”(等)但在某些方面看起来有点乱,因为我使用NSXMLParser来避免不得不开始搞乱内容。如果替换是最好的前进方式,我可以设想“&lt; =”和“&gt; =”但我应该包括其他任何序列吗?
我是Cocoa的新手,所以可能很容易错过一些明显的东西 - 在这种情况下很多道歉。我确实看到其他人发现了类似的问题,但无法从问题中找到好的方法。
我正在处理错误确定(以一种整洁的方式),但它阻止我的应用程序执行它的意图 - 即我需要避免错误而不是处理错误。
背景:该应用程序正在对html进行“之前”和“之后”比较,并寻找更改。我可以将“&lt; =”替换为非常奇怪的东西,然后在必要时将其交换回来。我甚至可以首先检查替换内容的数据以消除可能的歧义(例如,找不到下载页面中的UID序列,用UID序列替换“&lt; =”,解析页面,如果需要,用“&lt;”替换UID。 =“,ditto for”&gt; =“。
(我已经看过例如libxml2的libtidy,但是找不到简单的文档,并且如果它不能解决这些问题,我就会对启动这样的路线保持警惕。)
答案 0 :(得分:2)
NSXMLParser
不适用于解析HTML。 XML比HTML更严格,您遇到的错误肯定不是真实HTML中唯一可能出现的错误。有些HTML文档也是有效的XML,但这是例外,而不是常态。
我建议使用正确的HTML解析器,例如this one,它是围绕libxml的HTML解析函数的Objective-C包装器。