我正在编写一种方法来解析 HTML 字符串,查询并获取一些节点,然后为这些节点输出 HTML。
我正在使用libxml,并设法加载和解析输入 HTML,并为我想要的节点输出 HTML 字符串,除了我想要保留任何 HTML 实体,并且 libxml 似乎将这些转换为它们关联的 UTF-8人物。
这是我到目前为止所得到的(代码是 Objective-C 项目的一部分):
NSString *HTMLString = ...
NSData *documentData = [HTMLString dataUsingEncoding:NSUTF8StringEncoding];
//Create the document
xmlDocPtr doc = htmlReadMemory([documentData bytes],
[documentData length],
"",
NULL,
HTML_PARSE_NOWARNING | HTML_PARSE_NOERROR);
//Get the node I want to output
xmlNodePtr node = ...
//Create the node buffer and fill it with the node content
xmlBufferPtr nodeBuffer = xmlBufferCreate();
htmlNodeDump(nodeBuffer, doc, node);
...
这可以很好地转储节点的 HTML 内容,除了字符实体被转换为 UTF-8 字符 - 输入 HTML 中唯一存在的实体是引号,例如’
和‘
,当我写出节点的 HTML 时我希望保留它内容。
我查看了与 HTML 解析和 HTML 树函数相关的 libxml 文档,但似乎找不到任何有关 HTML 实体的信息。我也不确定这是否是在解析或输出期间完成的。我确实尝试使用简单地输出节点的内容,xmlNodeGetContent()
并且实体也被相应的 UTF8 字符替换,这让我怀疑这是一个解析问题,但我不确定。