33.30.1 Объектная модель документа

Объектная модель документа (DOM), возвращаемая libxml-parse-html-region (и другими функциями разбора XML), представляет собой древовидную структуру, в которой каждый узел имеет имя узла (называемое тег), необязательный список ключ/значение атрибутов, а затем список дочерних узлов. Дочерние узлы могут быть либо строками, либо объектами DOM.

(body ((width . "101"))
 (div ((class . "thing"))
  "Foo"
  (div nil
   "Yes")))
Функция: dom-node tag &optional attributes &rest children

Эта функция создает узел DOM типа tag. Если предоставляются attributes, они должны быть списком пар ключ/значение. Если предоставляются children, они должны быть узлами DOM.

Следующие функции могут использоваться для работы с этой структурой. Каждая функция принимает узел DOM или список узлов. В последнем случае используется только первый узел в списке.

Простые аксессоры:

dom-tag node

Возвращает тег (также называемый “имя узла”) узла.

dom-attr node attribute

Возвращает значение attribute в узле. Типичное использование:

(dom-attr img 'href)
=> "https://fsf.org/logo.png"
dom-children node

Возвращает всех дочерних узлов узла.

dom-non-text-children node

Возвращает всех дочерних узлов узла, которые не являются строками.

dom-attributes node

Возвращает список пар ключ/значение атрибутов узла.

dom-text node

Возвращает все текстовые элементы узла в виде конкатенированной строки.

dom-texts node

Возвращает все текстовые элементы узла, а также текстовые элементы всех дочерних узлов узла рекурсивно, в виде конкатенированной строки. Эта функция также принимает необязательный разделитель, который вставляется между текстовыми элементами.

dom-parent dom node

Возвращает родителя node в dom.

dom-remove dom node

Удаляет node из dom.

Следующие функции используются для изменения DOM.

dom-set-attribute node attribute value

Устанавливает attribute узла равным value.

dom-remove-attribute node attribute

Удаляет attribute из node.

dom-append-child node child

Добавляет child в качестве последнего дочернего элемента node.

dom-add-child-before node child before

Добавляет child в список дочерних элементов node перед узлом before. Если before равен nil, child становится первым дочерним элементом.

dom-set-attributes node attributes

Заменяет все атрибуты узла новым списком ключ/значение.

Следующие функции используются для поиска элементов в DOM. Все они возвращают списки соответствующих узлов.

dom-by-tag dom tag

Возвращает все узлы в dom типа tag. Типичное использование:

(dom-by-tag dom 'td)
=> '((td ...) (td ...) (td ...))
dom-by-class dom match

Возвращает все узлы в dom, у которых имена классов соответствуют match, который является регулярным выражением.

dom-by-style dom style

Возвращает все узлы в dom, у которых стили соответствуют match, который является регулярным выражением.

dom-by-id dom style

Возвращает все узлы в dom, у которых идентификаторы соответствуют match, который является регулярным выражением.

dom-search dom predicate

Возвращает все узлы в dom, для которых predicate возвращает значение, отличное от nil. predicate вызывается с узлом, который подлежит проверке, в качестве параметра.

dom-strings dom

Возвращает все строки в dom.

Вспомогательные функции:

dom-pp dom &optional remove-empty

Красиво выводит dom в текущей точке. Если remove-empty установлен, не печатаются текстовые узлы, содержащие только пробелы.

dom-print dom &optional pretty xml

Печатает dom в текущей точке. Если xml не равен nil, печать осуществляется как XML; в противном случае — как HTML. Если pretty не равен nil, HTML/XML индексируется логически.