Spec-Zone.ru › Elisp

Разбор 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API