logo
Хабибуллин

Преобразование дерева объектов в XML

Итак, дерево объектов DOM построено надлежащим образом. Теперь надо его преобразовать в документ XML, страничку HTML, документ PDF или объект другого типа. Средства для выполнения такого преобразования составляют третью часть набора JAXP —

пакеты javax.xml.transform, javax.xml.transform.dom, javax.xml.transform.sax, javax.xml.

transform.stream, которые представляют собой реализацию языка описания таблиц сти-

лей для преобразований XSLT (XML Stylesheet Language for Transformations) средства-

ми Java.

Язык XSLT разработан консорциумом W3 как одна из трех частей, составляющих язык записи таблиц стилей XSL (XML Stylesheet Language). Все материалы по XSL можно посмотреть на сайте проекта по адресу http://www.w3.org/Style/XSL/.

Интерфейсы и классы, входящие в пакеты javax.xml.transform.*, управляют процессором XSLT, в качестве которого выбран процессор Xalan, разработанный в рамках про-

екта Apache Software Foundation, http://xml.apache.org/xalan-j/.

Исходный объект преобразования должен иметь тип Source. Интерфейс Source определяет всего два метода доступа к идентификатору объекта:

public String getSystemId(); public void setSystemId(String id);

У интерфейса Source есть три реализации. Класс DOMSource подготавливает к преобразованию дерево объектов DOM, класс SAXSource подготавливает SAX-объект, а класс StreamSource — простой поток данных. В конструкторы этих классов заносится ссылка на исходный объект — для конструктора класса DOMSource это узел дерева, для конструктора класса SAXSource — имя файла, для конструктора класса StreamSource — входной поток. Методы перечисленных классов позволяют задать дополнительные свойства исходных объектов преобразования.

Результат преобразования описывается интерфейсом Result. Он тоже определяет точно такие же методы доступа к идентификатору объекта-результата, как и интерфейс Source. У него тоже есть три реализации — классы DOMResult, SAXResult и StreamResult. В конструкторы этих классов заносится ссылка на выходной объект. В первом случае это узел дерева, во втором — объект типа ContentHandler, в третьем — файл, в который будет занесен результат преобразования, или выходной поток.

Само преобразование выполняется объектом класса Transformer. Вот стандартная схема преобразования дерева объектов DOM в документ XML, записываемый в файл.

TransformerFactory transFactory = TransformerFactory.newInstance();

Transformer transformer = transFactory.newTransformer();

DOMSource source = new DOMSource(document);

File newXMLFile = new File("ntb1.xml");

FileOutputStream fos = new FileOutputStream(newXMLFile);