1

我有一个想要使用 NSXMLParser 解析的 XML 文档。它可以包含的标签之一是<html>,在我解析的表示中,我想要该标签的内容,逐字记录。但是,当我解析文档时,会为 html 标记内的每个标记的开始、结束和内容调用我的委托方法。

我无法让文档的提供者添加 CDATA 标签;我也不能使用 NSXMLParser 以外的东西来解析文档。

有没有办法告诉解析器将 HTML 标记的内容视为 CDATA 并保持它们不被解析,即使它们包含其他标记?

4

1 回答 1

1

这太糟糕了,XML 提要的所有者不会修复它,因为根据 HTML,您最终可能会得到格式错误的 XML 提要。如果它真的是一个 XML 文档,他们肯定应该将它包装在 aCDATA或替换所有的<with&lt;和所有的>with 中&gt;

坦率地说,如果您只需要 HTML,而您所拥有的只是包含 HTML 的 XML 标记,而没有CDATA或适当的字符替换,我可能根本不会尝试运行它NSXMLParser(因为成功的解析取决于包含的 HTML 的性质)。我会使用NSScannerorNSRegularExpression来提取包装 HTML 的 XML 的开始和结束标记之间的所有文本。

或者,如果你真的想使用NSXMLParser(因为除了你需要的 HTML 之外还有其他东西),然后手动更改NSData,将 HTML 包装在CDATA你自己的.

另一方面,如果您尝试解析的文档确实不是 XML,而只是 HTML,那么当然,您不应该使用 XML 解析器来解析它。您应该使用像 HPPLE 这样的 HTML 解析器,如Ray Wendlich 网站上Galloway 的文章How to Parse HTML on iOS中所述。

于 2013-08-21T14:35:05.723 回答