0

我正在使用 NSXMLParser 从网站解析 HTML。测试站点在我的控制之下,但在操作站点不会。

问题是当解析器遇到包含“坏”字符的 javascript 时。例如,包含if(screen.width<=521). 问题是代码中的 <。我可以看到问题,但不确定是否有任何好的解决方法。(NSXMLParser 报告 NSXMLParserErrorDomain 错误 68。我明白了原因 - 它将 <= 视为新标签的开始,但 = 不是有效的标签名称字符......)。但是那我该怎么办 eg if(var<20)

我实际上对特定内容不感兴趣,因此可以执行全局替换/删除例如“<=”和“>=”(等)之类的操作,但在某些方面这似乎有点混乱,因为我使用 NSXMLParser 来避免不得不开始弄乱内容。如果替换是最好的前进方式,我可以设想“<=”和“>=”,但我应该包括任何其他序列吗?

我是 Cocoa 的新手,所以很容易错过了一些明显的东西——在这种情况下,我很抱歉。我确实看到其他人也发现了类似的问题,但无法从这些问题中找到一个好的方法。

我正在处理错误(以整洁的方式),但它阻止了我的应用程序做它应该做的事情 - 即我需要避免错误而不是处理它。

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

(我查看了例如 libxml2 的 libtidy,但找不到简单的文档,并且如果它不能解决问题,我对启动这样的路线持谨慎态度。)

4

1 回答 1

2

NSXMLParser,顾名思义,并不是用来解析 HTML 的。XML 比 HTML 严格得多,您遇到的错误肯定不是真实世界 HTML 中唯一可能出现的错误。有些 HTML 文档也是有效的 XML,但这是例外,而不是常态。

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

于 2012-07-28T13:33:08.117 回答