Emacs может быть скомпилирован с поддержкой встроенной libxml2.
Эта функция возвращает не-nil, если встроенная поддержка libxml2 доступна в этой сессии Emacs.
Когда поддержка libxml2 доступна, можно использовать следующие функции для разбора текста HTML или XML в древовидные объекты Lisp.
Эта функция разбирает текст между start и end как HTML и возвращает список, представляющий дерево разбора HTML. Она пытается обрабатывать HTML реального мира, надежно справляясь с синтаксическими ошибками.
Если start или end равны nil, по умолчанию используются значения point-min и point-max соответственно.
Необязательный аргумент base-url, если он не равен nil, следует использовать для предупреждений и ошибок, сообщаемых библиотекой libxml2, но Emacs в настоящее время вызывает библиотеку с отключенными ошибками и предупреждениями, поэтому этот аргумент не используется.
Если необязательный аргумент discard-comments не равен nil, любой комментарий верхнего уровня отбрасывается. (Этот аргумент устарел и будет удален в будущих версиях Emacs. Чтобы удалить комментарии, используйте утилиту xml-remove-comments для данных перед вызовом функции разбора.)
В дереве разбора каждый HTML-узел представляется списком, в котором первый элемент — это символ, представляющий имя узла, второй элемент — это список атрибутов узла, а остальные элементы — дочерние узлы.
Пример ниже демонстрирует это. При заданном (некорректном) HTML-документе:
<html><head></head><body width=101><div class=thing>Foo<div>Yes
Вызов libxml-parse-html-region возвращает этот DOM (объектную модель документа):
(html nil
(head nil)
(body ((width . "101"))
(div ((class . "thing"))
"Foo"
(div nil
"Yes"))))
Эта функция отображает разобранный HTML в dom в текущем буфере. Аргумент dom должен быть списком, сгенерированным libxml-parse-html-region. Эта функция, например, используется EWW в Руководстве по Emacs Web Wowser.
Эта функция аналогична libxml-parse-html-region, за исключением того, что она разбирает текст как XML, а не HTML (поэтому она более строга в отношении синтаксиса).