Я пишу метод для анализа строки 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-контент узла.
Я просмотрел документы libxml, относящиеся к синтаксическому анализу HTML и функциям дерева HTML, и не могу найти никакой информации о сущностях HTML. Я также не уверен, что это делается во время синтаксического анализа или вывода. Я пытался просто вывести содержимое узла, используя xmlNodeGetContent()
, и сущности также были заменены соответствующими символами UTF8, что заставляет меня подозревать, что это проблема синтаксического анализа, но я не уверен.