【发布时间】:2018-06-21 12:36:07
【问题描述】:
有几种不同的方法可以从Cocoa 中的NSString 中删除HTML tags。
One way是将字符串渲染成NSAttributedString,然后抓取渲染后的文本。
Another way 是使用NSXMLDocument's -objectByApplyingXSLTString 方法来应用XSLT 转换。
很遗憾,iPhone 不支持NSAttributedString 或NSXMLDocument。有太多的边缘案例和格式错误的HTML 文档让我无法使用正则表达式或NSScanner。有没有人可以解决这个问题?
一个建议是简单地寻找开始和结束标记字符,除了非常琐碎的情况外,这种方法将不起作用。
例如,这些情况(来自 Perl Cookbook 关于同一主题的章节)会破坏这种方法:
<IMG SRC = "foo.gif" ALT = "A > B">
<!-- <A comment> -->
<script>if (a<b && a>c)</script>
<![INCLUDE CDATA [ >>>>>>>>>>>> ]]>
【问题讨论】:
-
您可以添加一些逻辑来考虑引号和撇号... CDATA 需要更多的工作,但 HTML 的全部意义在于解析器可以忽略未知标签;如果您将所有标签视为未知,那么您应该只获取原始文本。
-
我想评论一下,一个好的(但基本的)正则表达式绝对不会在您的示例中破坏。如果您可以保证格式良好的 XHTML,当然不会。我知道你说你不能,但我想知道为什么;-)
-
这个问题有很好的答案。 Flatten HTML using Objective c
-
不幸的是,使用 NSScanner 太慢了。
-
更不幸的是,链接的 NSScanner 示例仅适用于琐碎的 html。我在帖子中提到的每个测试用例都失败了。
标签: ios objective-c iphone cocoa-touch nsstring