Языки XSLT и XSL

Средства преобразования для потоков ввода-вывода определены в классах StreamSource и StreamResult пакета javax.xml.transform.stream.

Класс StreamSource действует как хранилище для источника преобразования в виде потока разметки XML.

Конструкторы класса

public StreamSource()

public StreamSource(File f)

public StreamSource(InputStream inputStream)

public StreamSource(InputStream inputStream,

String systemId)

public StreamSource(Reader reader)

public StreamSource(Reader reader, String systemId)

public StreamSource(String systemId)

создают соответственно пустой входной поток, входной поток из файла, байтовый входной поток, байтовый входной поток с заданного системного идентификатора, символьный входной поток, символьный входной поток с заданного системного идентификатора, и, наконец, входной поток с заданного системного идентификатора.

В классе StreamSource задано поле

public static final String FEATURE.

Если метод getFeature() класса TransformerFactory возвращает true для значения FEATURE, указанного в качестве аргумента метода, то объект Transformer, поддерживает входной источник данного типа.

Методы класса позволяют получить или установить источники входного потока.

Так, методы

public InputStream getInputStream()

public void setInputStream(InputStream inputStream)

получают и устанавливают байтовый входной поток для источника, а методы

public Reader getReader()

public void setReader(Reader reader)

выполняют те же операции для символьного потока.

Методы

public String getPublicId()

public void setPublicId(String publicId)

получают и устанавливают общедоступный идентификатор для источника, а методы

public String getSystemId()

public void setSystemId(String systemId)

выполняют те же операции для системного идентификатора.

Метод

public void setSystemId(File f)

позволяет получить системный идентификатор из ссылки на файл

 

Класс StreamResult действует как хранилище для результата преобразования, который может быть документом XML или HTML, либо текстовым документом.

Конструкторы класса

public StreamResult()

public StreamResult(File f)

public StreamResult(OutputStream outputStream)

public StreamResult(String systemId)

public StreamResult(Writer writer)

создают соответственно пустой выходной поток, входной поток в файл, байтовый выходной поток, выходной поток в заданный системный идентификатор или символьный выходной поток.

В классе StreamResult задано поле

public static final String FEATURE.

Если метод getFeature() класса TransformerFactory возвращает true для значения FEATURE, указанного в качестве аргумента метода, то объект Transformer, поддерживает выходной адресат данного типа.

Методы класса позволяют получить или установить адресаты выходного потока.

Так, методы

public OutputStream getOutputStream()

public void setOutputStream(OutputStream outputStream)

получают и устанавливают байтовый выходной поток для адресата, а методы

public Writer getWriter()

public void set Writer(Writer writer)

выполняют те же операции для символьного выходного потока.

Методы

public String getSystemId()

public void setSystemId(String systemId)

получают и устанавливают общедоступный идентификатор для адресата, а метод

public void setSystemId(File f)

позволяет получить системный идентификатор из ссылки на файл.

 

Примеры вывода документов XML:

1. Вывод документа newEmailDoc в файл newemail.xml:

// Создание объекта TransformerFactory

TransformerFactory transXMLFactory =

TransformerFactory.newInstance() ;

// Создание объекта Transformer

Transformer XMLTransformer =

transXMLFactory.newTransformer();

// Создание объекта DOMSource

DOMSource sourceXML = new DOMSource(newEmailDoc);

// Создание объекта File

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

// Создание объекта FileOutputStream

FileOutputStream newEmailOutput =

new FileOutputStream(newXMLFile);

// Создание объекта StreamResult

StreamResult resultXML = new StreamResult(newEmailOutput);

// Выполнение преобразования из DOMSource в

// StreamResult и вывод результата в файл newemail.xml

XMLTransformer.transform(sourceXML, resultXML);

 

 

2. Вывод содержимого документа email1Doc на экран:

// Создание объекта TransformerFactory

TransformerFactory transStringFactory =

TransformerFactory.newInstance() ;

// Создание объекта Transformer

Transformer stringTransformer =

transStringFactory.newTransformer();

// Создание объекта DOMSource

DOMSource sourceStringXML = new DOMSource(email1Doc);

// Создание объекта StringWriter

StringWriter outputXMLString = new StringWriter();

// Создание объекта StreamResult

StreamResult resultStringXML =

new StreamResult(outputXMLString);

// Выполнение преобразования из DOMSource в

// StreamResult и вывод результата в outputXMLString

stringTransformer.transform(sourceStringXML,

resultStringXML);

// Преобразование результата в строку

String newEmailString = outputXMLString.toString();

// Вывод документа на экран

System.out.println("Новый документ XML:\n " +

newEmailString);

 

 

Языки XSLT и XSL

Связывание документов XML с таблицами стилей

Наиболее простым способом форматированного вывода документов XML в Web-браузерах является связывание документа XML с внешними таблицами стилей.

Для такого связывания в спецификации W3 «Связывание таблиц стилей с документами XML (Associating Style Sheets with XML documents)» введена инструкция по обработке xml-stylesheet. Эта инструкция помещается в прологе документа XML и имеет следующий формат:

<?xml-stylesheet href="URL" type="text/css" [title="имя"]

[media="среда-вывода"] [charset="кодировка-таблицы"]

[alternate="yes | no"]?>

Псевдоатрибут href в инструкции задает местонахождение таблицы стилей, а псевдоатрибут type – тип таблицы (его значение всегда "text/css"). Псевдоатрибут title задает имя таблицы стилей, псевдоатрибут media – среду вывода документа (например, "screen" или "print"), а псевдоатрибут charset – кодировку таблицы стилей (например, "Windows-1251"). Псевдоатрибут определяет, является ли таблица альтернативной, т.е. имеет то же значение атрибута title (у альтернативных таблиц должны отличаться значения псевдоатрибута media и/или charset). По умолчанию значение псевдоатрибута alternate равно no.

Пример задания альтернативных таблиц:

<?xml-stylesheet alternate="yes" title="compact"

href="small.css" media="screen" type="text/css"?>

<?xml-stylesheet alternate="yes" title="compact"

href="small-extra.css" media="print" type="text/css"?>

В качестве селекторов в таблицах стилей задаются имена элементов документа XML. Содержимое этих элементов будет выведено в Web-браузере (Internet Explorer или Netscape Navigator) в указанном формате.

Пусть задан следующий документ XML:

<?xml version="1.0" encoding="Windows-1251"?>

<?xml-stylesheet href="HTMLmessage.css" type="text/css"?>

<message>

<header>

<from>ivanov@mail.com</from>

<to>petrov@mail.com</to>

<subject>Поздравление</subject>

</header>

<body>Поздравляю с днем рождения!</body>

</message>

Таблица стилей HTMLmessage.css для этого документа имеет следующий вид:

message {font-size: 12pt; font-family: Arial}

header {color: navy}

from, to {display: block; font-weight: bold;

text-indent: 40pt}

subject {display: block; color: brown}

body {display: block; text-indent: 10pt}

На экран Web-браузера будет выведено:

ivanov@mail.com

petrov@mail.com

Поздравление

Поздравляю с днем рождения!

 

Возможности таблиц стилей по форматированному выводу документов XML очень ограничены, поскольку Web-браузер выводит только текстовое содержимое элементов и не «видит» в документе XML ни пустых элементов, ни атрибутов элементов. Более широкие возможности предоставляет использование языка преобразования для расширенных таблиц стилей – XSLT, который будет рассмотрен далее.








Дата добавления: 2015-03-20; просмотров: 549;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.019 сек.