Я использую libxml2.2.7.3 для разбора html-страниц, и у меня возникают трудности с его корректной работой с CDATA в HTML. Вот код:
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>
Анализатор ошибочно распознает внутри кавычек как настоящий 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? Или я что-то не так делаю?
Любые проницательные советы будут с благодарностью.
Спасибо!