我有一个XML文档,我想用NSXMLParser解析它。它可以包含的标签之一是<html>
,并且在我的解析表示中,我希望逐字逐句地获取该标签的内容。但是,当我解析文档时,我的委托方法被调用html标记内每个标记的开头,结尾和内容。
我无法让文档提供者添加CDATA标记;我也不能使用NSXMLParser以外的东西来解析文档。
有没有办法告诉解析器将HTML标记的内容视为CDATA并保留未解析的内容,即使它们包含其他标记?
答案 0 :(得分:1)
这太糟糕了,XML Feed的所有者无法修复它,因为根据HTML,您最终可能会得到格式错误的XML Feed。如果它确实是一个XML文档,它们肯定应该将它包装在CDATA
中,或者将所有<
替换为<
,将所有>
替换为>
。
坦率地说,如果你需要的只是HTML,而你所拥有的只是包含没有CDATA
或适当字符替换的HTML的XML标记,我可能不会尝试通过{{1完全(因为成功的解析取决于所包含的HTML的性质)。我使用NSXMLParser
或NSScanner
来提取包装HTML的XML开始和结束标记之间的所有文本。
或者,如果您真的想使用NSRegularExpression
(因为除了您需要的HTML之外还有其他内容),请手动更改NSXMLParser
,将HTML包装在{{1}中你自己。
另一方面,如果您尝试解析的文档确实不是XML,而只是HTML,那么当然,您不应该使用XML解析器对其进行解析。您应该使用HTML解析器,如HPPLE,如Galloway在Ray Wendlich网站上的文章How to Parse HTML on iOS中所述。