Использование интерфейса Mozilla JavaScript для XSL-преобразований
В этом документе описывается интерфейс JavaScript в Mozilla 1.2 и выше для XSLT-обработчика (TransforMiiX).
Создание XSLTProcessor
Для начала необходимо создать объект XSLTProcessor:
const processor = new XSLTProcessor();
Указание стильного файла
Прежде чем использовать его, вы должны импортировать стильный файл с помощью метода XSLTProcessor.importStylesheet(). Он принимает единственный параметр — узел DOM стильного файла XSLT для импорта.
Примечание: Импорт является динамическим, что означает, что если вы измените DOM стильного файла после его импорта, это отразится в обработке. Вместо изменения DOM рекомендуется использовать параметры стильного файла, которые обычно проще и могут обеспечить лучшую производительность.
const testTransform = document.implementation.createDocument("", "test", null); // Just an example to get a transform into a script as a DOM // XMLDocument.load is asynchronous, so all processing happens in the // onload handler testTransform.addEventListener("load", onload, false); testTransform.load("test-transform.xml"); function onload() { processor.importStylesheet(testTransform); }
Метод XSLTProcessor.importStylesheet() требует один аргумент — узел DOM. Если этот узел является узлом документа, вы можете передать полный XSL-трансформатор или литеральный трансформируемый элемент результата, в противном случае он должен быть элементом xsl:stylesheet или xsl:transform.
Преобразование документа
Для преобразования документа с использованием импортированного XSLT-стильного файла можно использовать методы XSLTProcessor.transformToDocument() или XSLTProcessor.transformToFragment().
transformToDocument
Метод XSLTProcessor.transformToDocument() принимает один аргумент — исходный узел для преобразования, и возвращает новый объект Document с результатами преобразования:
const newDocument = processor.transformToDocument(domToBeTransformed);
Результат зависит от метода вывода стильного файла:
-
html -
HTMLDocument -
xml -
XMLDocument -
text -
XMLDocumentс единственным корневым элементом<transformiix:result>с текстом в качестве дочернего элемента
transformToFragment
Также можно использовать метод XSLTProcessor.transformToFragment(), который вернет узел DocumentFragment. Это удобно, потому что добавление фрагмента к другому узлу прозрачно добавляет всех дочерних элементов этого фрагмента, а сам фрагмент не сливается. Фрагменты полезны для перемещения узлов и их хранения без избыточности полного объекта документа.
Метод XSLTProcessor.transformToFragment() принимает два аргумента: исходный документ для преобразования (как указано выше) и объект Document, который будет владельцем фрагмента (все фрагменты должны принадлежать документу).
const ownerDocument = document.implementation.createDocument("", "test", null); const newFragment = processor.transformToFragment(domToBeTransformed, ownerDocument);
Метод XSLTProcessor.transformToFragment() будет генерировать только объекты HTML DOM, если сам документ-владелец является HTMLDocument, или если метод вывода стильного файла равен HTML. Он **не** будет генерировать объекты HTML DOM, если только верхний элемент результата — <html>, поскольку метод XSLTProcessor.transformToFragment() редко используется для создания этого элемента. Если вы хотите это переопределить, вы можете установить метод вывода обычным способом.
Преобразование HTML
К сожалению, в настоящее время преобразование узлов HTML с помощью XSLT не поддерживается. Некоторые вещи работают, если вы используете имена узлов с маленькой буквы в шаблонах и выражениях и рассматриваете узлы как если бы они находились в пространстве имен null, однако это не очень хорошо протестировано, поэтому это может не сработать во всех ситуациях. Также возможно, что это изменится в будущей версии.
Преобразование XHTML должно работать как ожидается.
Установка параметров
Вы можете управлять параметрами стильного файла с помощью методов XSLTProcessor.setParameter(), XSLTProcessor.getParameter() и XSLTProcessor.removeParameter(). Все они принимают URI пространства имен и локальное имя в качестве первых двух параметров, а XSLTProcessor.setParameter() принимает третий — значение устанавливаемого параметра. См. Интерфейс XSLT/JavaScript в Gecko для примера.
Сброс
Объект XSLTProcessor также реализует метод XSLTProcessor.reset(), который можно использовать для удаления всех стильных файлов и параметров, затем возвращает обработчик в исходное состояние. Этот метод реализован в Gecko 1.3 и более поздних версиях.
Ресурсы
Следующие отражают интерфейс объекта XSLTProcessor:
См. также
- Интерфейс XSLT JavaScript в Gecko
- document.load() по поводу загрузки XML-документов (как используется выше)
Информация об исходном документе
- Автор(ы): Майк Хирн
- Дата последнего обновления: 21 декабря 2005 г.
- Информация об авторских правах: Авторские права (C) Майк Хирн
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/XSLT/Using_the_Mozilla_JavaScript_interface_to_XSL_Transformations