【发布时间】:2012-04-08 12:25:59
【问题描述】:
我正在编写一个方法来解析 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 字符替换,这让我怀疑这是一个解析问题,但我不确定。
【问题讨论】:
标签: html-entities libxml2