Главная » Java, Web, XML » Преобразование дерева объектов в XML

0

Итак, дерево объектов D0M построено надлежащим образом. Теперь надо его преобразовать в документ 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. trans form. *, управляют процессором XSLT, в качестве которого выбран процессор Xalan, разработанный в рамках проекта Apache Software Foundation, http://xml.apache.org/xalan-j/.

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

Source определяет всего два метода доступа к идентификатору объекта:

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

У интерфейса source есть три реализации. Класс DOMSource подготавливает к преобразованию дерево объектов D0M, а классы SAXsource и streamSource подготавливают SAX-объект и простой поток данных. В конструкторы этих классов заносится ссылка на исходный объект — для конструктора класса DOMSource это узел дерева, для конструктора класса SAXSource — ИМЯ файла, ДЛЯ КОНСТруКТОра Класса StreamSource — ВХОДНОЙ поток. Методы этих классов позволяют задать дополнительные свойства исходных объектов преобразования.

Результат преобразования описывается интерфейсом Result. Он тоже определяет точно такие же методы доступа к идентификатору объекта-результата, как и интерфейс                 У            тоже есть три реализации — классы

DOMResult, SAXResult И StreamResult. В КОНСТруКТОрЫ ЭТИХ классов ЗЭНОСИТ- ся ссылка на выходной объект. В первом случае это узел дерева, во втором — объект типа ContentHandler, в третьем — файл, в который будет занесен результат преобразования, или выходной поток.

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

TransformerFactory transFactory =

TransformerFactory.newInstance();

Transformer transformer = transFactory. newTrans former () ;

DOMSource source = new DOMSource (document) ;

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

FileOutputStream fos = new FileOutputStream(newXMLFile) ;

StreamResult result = new StreamResult(fos); transformer.transform(source, result);

Вначале методом newlnstance о создается экземпляр transFactory фабрики объектов-преобразователей. Методом

public void setAttrbute(string name, String value);

класса Trans formerFactory можно установить некоторые атрибуты экземпляра. Имена и значения атрибутов зависят от реализации фабрики.

С помощью фабрики преобразователей создается объект-преобразователь класса Transformer. При создании этого объекта в него можно занести объект, содержащий правила преобразования, например, таблицу стилей XSL.

В созданный объект класса Transformer методом public void setParameter (String name, String value) ; можно занести параметры преобразования, а методами public void setOutputProperties(Properties out); public void setOutputProperty(String name, String value);

можно определить свойства преобразованного объекта. Имена свойств name задаются константами, которые собраны в специально определенный класс outputKeys, содержащий только эти константы. Вот их список:

•            Cdata_section_elements — список имен секций cdata через пробел.

?   doctype _public — открытый идентификатор public преобразованного документа.

•          doctype_system — системный идентификатор system преобразованного документа.

•          ENCODING — кодировка символов преобразованного документа, значение атрибута encoding объявления XML.

•          INDENT — делать ли отступы в тексте преобразованного документа. Значения этого свойства "yes" или "по".

•            mediatype — МШЕ-тип содержимого преобразованного документа.

•            METHOD — метод вывода, одно из значений "xml", "html" или "text".

? omrr_xml_declaration — не включать объявление XML. Значения "yes" или "по".

•          standalone — отдельный или вложенный документ, значение атрибута standalone объявления XML. Значения "yes" или "по".

•            version — номер версии XML для атрибута version объявления XML.

Например, можно задать кодировку символов преобразованного документа следующим методом:

transformer.setOutputProperty(OutputKeys.ENCODING, "Windows-1251");

Затем в приведенном примере по дереву объектов document типа Node создается объект класса DOMSouroe — упаковка дерева объектов для последующего преобразования. По типу аргумента конструктора видно, что можно преобразовать не все дерево, а какое-либо его поддерево, записав в конструкторе класса DOMSource корневой узел поддерева.

Наконец, определяется результирующий объект result, связанный с файлом newCourses. xml и выполняется преобразование методом transform о .

Более сложные преобразования выполняются с помощью таблицы стилей XSL.

Литература:

Хабибуллин И. Ш. Разработка Web-служб средствами Java. — СПб.: БХВ-Петербург, 2003. — 400 с: ил.

По теме:

  • Комментарии