Разбор HTML и XML
Emacs можно скомпилировать со встроенной поддержкой libxml2.
- Функция: libxml-available-p
Эта функция возвращает значение, которое не является
nil, если в текущем сеансе Emacs доступна встроенная поддержка libxml2.
Если доступна поддержка libxml2, для разбора текста HTML или XML в деревья объектов Lisp можно использовать следующие функции.
- Функция: libxml-parse-html-region &optional start end base-url discard-comments
-
Эта функция разбирает текст между 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"))))
- Функция: shr-insert-document dom
Эта функция отображает разобранный HTML из dom в текущем буфере. Аргумент dom должен быть списком, созданным функцией
libxml-parse-html-region. Например, эта функция используется программой EWW из Руководства по веб-браузеру Emacs.
- Функция: libxml-parse-xml-region &optional start end base-url discard-comments
Эта функция аналогична
libxml-parse-html-region, но разбирает текст как XML, а не как HTML (поэтому она строже относится к синтаксису).
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Parsing-HTML_002fXML.html