Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 484

Ильдар Шаукатович Хабибуллин

DOMSource source = new DOMSource(document);

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

FileOutputStream fos = new FileOutputStream(newXMLFile);

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

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

public void setAttrbute(String name, String value);

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

С помощью фабрики преобразователей создается объект-преобразователь класса 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_sect I on_e lements — список имен секций cdata через пробел;

□ doctype_public — открытый идентификатор public преобразованного документа;

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

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

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

□ media_type — MIME-тип содержимого преобразованного документа;

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

□ omit_xml_declaration — не включать объявление XML. Значения "yes" или "no";

□ STANDALONE- отдельный или вложенный документ, значение атрибута standalone

объявления XML. Значения "yes" или "no";

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

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

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

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

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

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

Таблицы стилей XSL

В документах HTML часто применяются таблицы стилей CSS (Cascading Style Sheet), задающие общие правила оформления документов HTML: цвет, шрифт, заголовки. Выполнение этих правил придает документам единый стиль оформления.

Для документов XML, в которых вообще не определяются правила визуализации, идея применить таблицы стилей оказалась весьма плодотворной. Таблицы стилей для документов XML записываются на специально сделанной реализации языка XML, названной XSL (XML Stylesheet Language). Все теги документов XSL относятся к пространству имен с идентификатором . Обычно они записываются с префиксом xsl. Если принят этот префикс, то корневой элемент таблицы стилей XSL будет называться <xsl: stylesheet>.