T.M. SoftStudio

feci quod potui, faciant meliora potentes

JAXP API

TrAX

Технология XSLT (eXtensible Stylesheet Language Transformations) позволяет преобразование исходного дерева первоначального XML-документа в конечное дерево, представляющее документ, который может иметь формат XML, HTML, XHTML или TXT. При этом к исходному документу применяются таблицы XSLT-стилей — шаблоны, определяющие правила преобразования исходного дерева с помощью языка XPath.

Пакеты javax.xml.transform, javax.xml.transform.sax, javax.xml.transform.dom и javax.xml.transform.stream являются частью спецификации JAXP и составляют интерфейс Transformation API for XML (TrAX), обеспечивающий поддержку технологии XSLT для платформы Java.

Пакет javax.xml.transform используется для обработки таблиц XSLT-стилей и преобразования исходного документа в конечный документ.

Основным классом пакета javax.xml.transform является класс Transformer, обеспечивающий преобразование исходного дерева документа в конечное дерево. Класс Transformer предоставляет следующие методы.

  • public void reset()

Возвращает объект Transformer в исходную конфигурацию, обеспечивая его повторное использование.

  • public abstract void transform(Source xmlSource, Result outputTarget)

Осуществляет преобразование исходного документа в конечный документ. Интерфейс javax.xml.transform.Source представляет исходный документ и имеет методы void setSystemId(String systemId) и String getSystemId() — установка и получение системного идентификатора исходного документа. Интерфейс javax.xml.transform.Result представляет конечный документ и имеет методы void setSystemId(String systemId) и String getSystemId() — установка и получение системного идентификатора конечного документа.

  • public abstract void setParameter(String name, Object value)

public abstract Object getParameter(String name)

public abstract void clearParameters()

Первыйм метод устанавливает, второй метод возвращает, третий метод очищает параметры, определенные в таблице XSLT-стилей преобразования.

  • public abstract void setURIResolver(URIResolver resolver)

public abstract URIResolver getURIResolver()

Первыйм метод устанавливает, второй метод возвращает объект URIResolver, используемый при преобразовании для разрешения URI-адресов в документе. Интерфейс javax.xml.transform.URIResolver имеет метод Source resolve(String href, String base), вызываемый процессором для разрешения URI-ссылок в объекты Source.

  • public abstract void setOutputProperties(java.util.Properties oformat)

public abstract java.util.Properties getOutputProperties()

Первыйм метод устанавливает, второй метод возвращает такие свойства преобразования, как:

    – javax.xml.transform.OutputKeys.METHOD — значения "xml", "html" или "text" означают преобразование в документ формата XML, HTML или TXT соответственно;

    – javax.xml.transform.OutputKeys.VERSION — версия формата конечного документа, например, для формата XML это может быть значение 1.0;

    – javax.xml.transform.OutputKeys.ENCODING — кодировка конечного документа, например, UTF-8 или UTF-16;

    – javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION — значения "yes" или "no" определяют, должен ли XSLT-процессор выдавать в конечном документе XML-декларацию <?xml ...?>;

    – javax.xml.transform.OutputKeys.STANDALONE — значения "yes" или "no" определяют, должен ли XSLT-процессор выдавать в конечном документе объявление standalone="yes";

    – javax.xml.transform.OutputKeys.DOCTYPE_PUBLIC — публичный идентификатор DTD-описания конечного документа;

    – javax.xml.transform.OutputKeys.DOCTYPE_SYSTEM — системный идентификатор DTD-описания конечного документа;

    – javax.xml.transform.OutputKeys.CDATA_SECTION_ELEMENTS — перечень элементов с секциями CDATA;

    – javax.xml.transform.OutputKeys.INDENT — значения "yes" или "no" определяют, может ли XSLT-процессор структурировать конечное дерево путем добавления дополнительных побелов;

    – javax.xml.transform.OutputKeys.MEDIA_TYPE — MIME-тип данных конечного дерева.

  • public abstract void setErrorListener(ErrorListener listener)

public abstract ErrorListener getErrorListener()

Первый метод устанавливает, второй метод возвращает объект javax.xml.transform.ErrorListener, обеспечивающий обработку ошибок XSLT-преобразования. Интерфейс ErrorListener имеет методы void warning(TransformerException exception), void error(TransformerException exception) и void fatalError(TransformerException exception), получающие уведомления об ошибках и предупреждениях.

Объект Transformer создается с помощью класса-фабрики javax.xml.transform.TransformerFactory, имеющего следующие методы.

  • public static TransformerFactory newInstance()

public static TransformerFactory newInstance(String factoryClassName,
ClassLoader classLoader)

Создают новый экземпляр класса TransformerFactory.

  • public abstract Transformer newTransformer(Source source)

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

  • public abstract Transformer newTransformer()

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

  • public abstract Templates newTemplates(Source source)

Создает объект javax.xml.transform.Templates, представляющий таблицы XSLT-стилей. Интерфейс Templates имеет методы Transformer newTransformer() — создает новый объект Transformer для данного XSLT-шаблона, и Properties getOutputProperties() — возвращает свойства преобразования.

  • public abstract Source getAssociatedStylesheet(Source source,
    String media, String title, String charset)

Возвращает каскадные таблицы стилей, связанные с исходным документом.

  • public abstract void setURIResolver(URIResolver resolver)

public abstract URIResolver getURIResolver()

Устанавливает и возвращает объект URIResolver, используемый при преобразовании для разрешения URI-адресов в документе.

  • public abstract void setFeature(String name, boolean value)

public abstract boolean getFeature(String name)

public abstract void setAttribute(String name, Object value)

public abstract Object getAttribute(String name)

Первая пара методов устанавливает и возвращает свойства преобразования, вторая пара методов — атрибуты преобразования.

  • public abstract void setErrorListener(ErrorListener listener)

public abstract ErrorListener getErrorListener()

Первый метод устанавливает, второй метод возвращает объект javax.xml.transform.ErrorListener, обеспечивающий обработку ошибок XSLT-преобразования.

Пакет javax.xml.transform.dom позволяет оперировать DOM-деревьями в качестве исходных и конечных деревьев XSLT-преобразования. Пакет javax.xml.transform.dom содержит классы DOMSource и DOMResult, реализующие интерфейсы Source и Result пакета javax.xml.transform соответственно.

Класс DOMSource представляет исходное DOM-дерево XSLT-преобразования и имеет следующие конструкторы и методы.

  • public DOMSource()

public DOMSource(Node n)

public DOMSource(Node node, String systemID)

Создает новый источник преобразования.

  • public void setNode(Node node)

public Node getNode()

Первый метод устанавливает, второй метод возвращает DOM-узел, представляющий исходное дерево.

  • public void setSystemId(String systemID)

public String getSystemId()

Первый метод устанавливает, второй метод возвращает базовый идентификатор для разрешения URL-адресов.

Класс DOMResult представляет конечное DOM-дерево XSLT-преобразования и имеет следующие конструкторы и методы:

  • public DOMResult()

public DOMResult(Node node)

public DOMResult(Node node, String systemId)

public DOMResult(Node node, Node nextSibling)

public DOMResult(Node node, Node nextSibling, String systemId)

Создают новый объект DOMResult.

  • public void setNode(Node node)

public Node getNode()

Первый метод устанавливает, второй метод возвращает DOM-узел, содержащий конечное дерево преобразования.

  • public void setNextSibling(Node nextSibling)

public Node getNextSibling()

Первый метод устанавливает, второй метод возвращает DOM-узел, являющийся дочерним для конечного дерева.

  • public void setSystemId(String systemId)

public String getSystemId()

Первый метод устанавливает, второй метод возвращает системный идентификатор конечного дерева.

Пакет javax.xml.transform.sax позволяет использовать SAX-потоки событий при XSLT-преобразованиях. Пакет javax.xml.transform.sax содержит классы SAXResult, SAXSource и SAXTransformerFactory, а также интерфейсы TemplatesHandler и TransformerHandler.

Класс SAXResult реализует интерфейс javax.xml.transform.Result и имеет следующие конструкторы и методы:

  • public SAXResult()

public SAXResult(ContentHandler handler)

Создают конечный объект XSLT-преобразования.

  • public void setHandler(ContentHandler handler)

public ContentHandler getHandler()

Первый метод устанавливает, второй метод возвращает объект ContentHandler, позволяющий анализировать конечный документ.

  • public void setLexicalHandler(LexicalHandler handler)

public LexicalHandler getLexicalHandler()

Первый метод устанавливает, второй метод возвращает объект org.xml.sax.ext.LexicalHandler, обеспечивающий лексический анализ конечного документа.

  • public void setSystemId(String systemId)

public String getSystemId()

Первый метод устанавливает, второй метод возвращает системный идентификатор конечного документа.

Класс SAXSource реализует интерфейс javax.xml.transform.Source и имеет следующие конструкторы и методы:

  • public SAXSource()

public SAXSource(XMLReader reader, InputSource inputSource)

public SAXSource(InputSource inputSource)

Создают исходный объект XSLT-преобразования.

  • public void setXMLReader(XMLReader reader)

public XMLReader getXMLReader()

Первый метод устанавливает, второй метод возвращает объект org.xml.sax.XMLReader, представляющий SAX-парсер исходного документа.

  • public void setInputSource(InputSource inputSource)

public InputSource getInputSource()

Первый метод устанавливает, второй метод возвращает объект org.xml.sax.InputSource, представляющий входящий поток XML-данных.

  • public void setSystemId(String systemId)

public String getSystemId()

Первый метод устанавливает, второй метод возвращает системный идентификатор исходных данных.

  • public static InputSource sourceToInputSource(Source source)

Преобразовывает объект Source в объект InputSource.

Интерфейс TemplatesHandler расширяет интерфейс org.xml.sax.ContentHandler и предназначен для SAX-анализа шаблона XSLT-преобразования. Интерфейс TemplatesHandler дополнительно имеет методы Templates getTemplates(), void setSystemId(String systemID) и String getSystemId().

Интерфейс TransformerHandler расширяет интерфейсы org.xml.sax.ContentHandler, org.xml.sax.ext.LexicalHandler и org.xml.sax.DTDHandler и обеспечивает XSLT-преобразование SAX-потока событий. Интерфейс TransformerHandler дополнительно имеет методы void setResult(Result result), void setSystemId(String systemID), String getSystemId() и Transformer getTransformer().

Класс-фабрика SAXTransformerFactory расширяет класс-фабрику javax.xml.transform.TransformerFactory и позволяет создавать объекты TemplatesHandler, TransformerHandler и XMLFilter с помощью методов:

public abstract TransformerHandler newTransformerHandler(Source src)

public abstract TransformerHandler newTransformerHandler(Templates
templates)

public abstract TransformerHandler newTransformerHandler()

public abstract TemplatesHandler newTemplatesHandler()

public abstract XMLFilter newXMLFilter(Source src)

public abstract XMLFilter newXMLFilter(Templates templates)

Пакет javax.xml.transform.stax позволяет использовать StAX-потоки при XSLT-преобразованиях, предоставляя классы StAXResult и StAXSource.

Класс StAXResult реализует интерфейс javax.xml.transform.Result и имеет следующие конструкторы и методы.

  • public StAXResult(XMLEventWriter xmlEventWriter)

  • public StAXResult(XMLStreamWriter xmlStreamWriter)

Создают новый экземпляр класса StAXResult.

  • public XMLEventWriter getXMLEventWriter()

public XMLStreamWriter getXMLStreamWriter()

Возвращают объекты javax.xml.stream.XMLEventWriter и javax.xml.stream.XMLStreamWriter, используемые для записи XML-документа.

  • public void setSystemId(String systemId)

public String getSystemId()

Устанавливает и возвращает системный идентификатор конечных данных.

Класс StAXSource реализует интерфейс javax.xml.transform.Source и имеет следующие конструкторы и методы.

  • public StAXSource(XMLEventReader xmlEventReader)

public StAXSource(XMLStreamReader xmlStreamReader)

Создают новый экземпляр класса StAXSource.

  • public XMLEventReader getXMLEventReader()

public XMLStreamReader getXMLStreamReader()

Возвращают объекты javax.xml.stream.XMLEventReader и javax.xml.stream.XMLStreamReader, используемые для анализа исходного документа.

  • public void setSystemId(String systemId)

public String getSystemId()

Первый метод устанавливает, второй метод возвращает системный идентификатор исходных данных.

Пакет javax.xml.transform.stream дает возможность использовать различного рода потоки при XSLT-преобразованиях, предоставляя для этого классы StreamResult и StreamSource.

Класс StreamResult, представляющий результат XSLT-преобразования, реализует интерфейс javax.xml.transform.Result и позволяет создавать и обрабатывать объекты из символьного или байтового потока, из URL-адреса или файла, используя следующие конструкторы и методы.

  • public StreamResult()

public StreamResult(OutputStream outputStream)

public StreamResult(Writer writer)

public StreamResult(String systemId)

public StreamResult(File f)

Создают объект StreamResult.

  • public void setOutputStream(OutputStream outputStream)

public OutputStream getOutputStream()

Первый метод устанавливает, второй метод возвращает байтовый поток, в который записывается результат XSLT-преобразования.

  • public void setWriter(Writer writer)

public Writer getWriter()

Первый метод устанавливает, второй метод возвращает символьный поток, в который записывается результат XSLT-преобразования.

  • public void setSystemId(String systemId)

public void setSystemId(File f)

public String getSystemId()

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

Класс StreamSource, представляющий источник XSLT-преобразования, реализует интерфейс javax.xml.transform.Source и дает возможность работать с различного рода потоками с помощью следующих конструкторов и методов.

  • public StreamSource()

public StreamSource(InputStream inputStream)

public StreamSource(InputStream inputStream, String systemId)

public StreamSource(Reader reader)

public StreamSource(Reader reader, String systemId)

public StreamSource(String systemId)

public StreamSource(File f)

Создают объект StreamSource.

  • public void setInputStream(InputStream inputStream)

public InputStream getInputStream()

Первый метод устанавливает, второй метод возвращает входящий байтовый поток.

  • public void setReader(Reader reader)

public Reader getReader()

Первый метод устанавливает, второй метод возвращает входящий символьный поток.

  • public void setPublicId(String publicId)

public String getPublicId()

public void setSystemId(String systemId)

public String getSystemId()

public void setSystemId(File f)

Методы устанавливают или возвращают публичный и системный идентификаторы исходных данных XSLT-преобразования.

Таким образом, простой код, обеспечивающий XSLT-преобразование XML-данных в требуемый формат, может выглядеть следующим образом:

Source inputXML = new StreamSource(inputStreamXML);

Source inputXSL = new StreamSource(inputStreamXSL);

Result output = new StreamResult(outputStream);

TransformerFactory factory = TransformerFactory.newInstance();

Templates templates = factory.newTemplates(inputXSL);

Transformer transformer = templates.newTransformer();

transformer.transform(inputXML, output);