使用NSXMLParser来parsingHTML

我正在开发一个应用程序,它汇总了一些来自互联网的信息并重新格式化内容。 所以我正在寻找一种方法来parsing一些HTML。 鉴于XML和HTML是非常相似的结构,我想“也许我应该只使用NSXMLParser”我已经使用它来parsing我的RSS源,我已经习惯了使用它,但我遇到了一个问题。

parsing器不会将<p>识别为一个元素。 提取<title><img>等元素没有问题,但不像<p> 。 有没有人试过这样做,如果是的话,你有任何build议或解决这个问题? 我认为XMLParser对我所做的工作很有帮助,我想用它,但显然,如果我无法获取<p>元素中的文本,那对我来说是完全没用的。

任何build议都是受欢迎的,即使是完全不同的方法。 我已经看过一些第三方库做这个,但是从我读的东西都有一些错误,我更喜欢使用苹果提供的东西。

“p”作为元素的名字没有什么特别之处。 虽然很难确定,因为您没有提供您要parsing的HTML示例,但问题很可能是由不是格式良好的XML的HTML引起的。 换句话说,使用NSXMLParser可以使用XHTML,但不一定是普通的HTML。

“p”元素经常在HTML中find,没有匹配的结束标签,这是不合法的XML。 我的猜测是,在尝试使用NSXMLParserparsing它之前,必须将HTML转换为XHTML

HTML不一定是格式良好的XML,当您将其parsing为XML时,这就很麻烦。

以下面的例子:

 <body> <p>123 <p>abc <p>789 </body> 

如果您在浏览器中查看这个HTML块,它将显示您所期望的。 但是,如果你把这个parsing成xml,会有麻烦,因为这些p标签没有closures。

我build议您使用我的DTHTMLParser,它是在NSXMLParser之后build模的,并使用libxml2来完美地parsingHTML。 你通常不能依赖于HTML格式良好,可以parsing为XML。

libxml2有一个HTML模式,它可以忽略诸如未closures的标签和任何HTML可能在ideosyncrasies中的东西。

HTMLparsing说明:

DTHTMLParser文档:

来源,DTFoundation的一部分:

  • DTHTMLParser.h
  • DTHTMLParser.m