我正在使用libxml2.2.7.3来解析html页面,而我在使用HTML中的CDATA正常运行时遇到了困难。这是代码:
xmlDocPtr doc = htmlReadMemory(data, length, "", NULL, 0);
xmlBufferPtr buffer = xmlBufferCreate();
xmlNodeDump(buffer, doc, doc->children, 0, 0);
printf("%s", (char*)buffer->content);
和HTML数据:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><body>
<div>
<script type="text/javascript">
//<![CDATA[
document.write('</div>');
//]]>
</script>
</div>
</body></html>
解析器错误地识别&lt; / div&gt;在引号内作为真正的html标记并打印出错误消息,如下所示:
:8: HTML parser error : Unexpected end tag : script </script> ^ :9: HTML parser error : Unexpected end tag : div </div> ^
打印出的结果和调试也意味着解析出错:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html><body> <div> <script type="text/javascript"><![CDATA[ //<![CDATA[ document.write(']]></script></div>'); //]]> </body></html>
所以问题是,这是libxml2的错误吗?或者我做错了什么? 任何有见地的建议将不胜感激。 谢谢!
答案 0 :(得分:3)
在HTML中,<script>
元素按定义包含CDATA,因此<![CDATA[
无效。
简而言之,源文件已被破坏。
该部分将更恰当地写为:
<script type="text/javascript">
document.write('<\/div>');
</script>