
- •Лекция 4-06
- •Тема 5.2. Обработка документов xml с использованием Java
- •Тема 5.2. Обработка документов xml с использованием Java
- •5.2.1. Обработка документов xml
- •5.2.2. СинтаксическиеSax-анализаторыXml
- •5.2.3. РеализацияDomxmLв языкеJava
- •5.2.3.1. Доступ к документу xml
- •5.2.3.1.1. Класс DocumentBuilder
- •5.2.3.1.2. КлассDocumentBuilderFactory
- •5.2.3.2. Интерфейсы dom xml в языкеJava
- •5.2.3.2.1. ИнтерфейсDomImplementation
- •5.2.3.2.2. ИнтерфейсNodeList
- •5.2.3.2.3. ИнтерфейсNamedNodeMap
- •5.2.3.2.4. ИнтерфейсNode
- •5.2.3.2.5. ИнтерфейсыDocument,DocumentFragmentиDocumentType
- •Тема 1: 'Поздравление'
- •5.2.3.2.6. ИнтерфейсElement
- •5.2.3.2.7. ИнтерфейсAttr
- •5.2.3.2.8. Интерфейсы CharacterData, Text, Comment и cdataSection
- •5.2.3.2.9. ИнтерфейсыEntity,EntityReference,NotationиProcessingInstruction
- •5.2.3.2.10. ИсключениеDomException
- •5.2.3.3. Средства выполнения преобразований документовXmLв языкеJava
- •5.2.3.3.1. Общие средства выполнения преобразований документовXml
- •5.2.3.3.2. Средства преобразования дляDom-анализатора
- •5.2.3.3.3. Средства преобразования для потоков ввода-вывода
5.2.3.3.2. Средства преобразования дляDom-анализатора
Средства преобразования для DOM-анализатора реализованы в пакетеjavax.xml.transform.dom.
Интерфейс DOMLocatorрасширяет интерфейсSourceLocatorи содержит единственный метод
public Node getOriginatingNode(),
возвращающий узел, в котором произошло событие.
Класс DOMSourceдействует как хранилище для преобразования дерева объектаSource, представленного в форме дереваDOM.
Конструкторы класса
public DOMSource()
public DOMSource(Node n)
public DOMSource(Node node, String systemID)
Первый и второй конструкторы создают соответственно пустой объект и объект для заданного узла n(новый источник ввода создается для поддерева этого узла). Третий конструктор задает дополнительно системный идентификатор в форме базовогоURI.
В классе DOMSource задано поле
public static final String FEATURE.
Если метод getFeature()классаTransformerFactoryвозвращаетtrueдля значенияFEATURE, указанного в качестве аргумента метода, то объектTransformerподдерживает источник ввода данного типа.
Методы
public Node getNode()
public void setNode(Node node)
позволяют получить или установить исходное дерево DOM, а с помощью методов
public String getSystemId()
public void setSystemId(String baseID)
можно получить или установить системный идентификатор в форме базового URI.
Класс DOMResultдействует как хранилище для преобразования результирующего дерева в форме дереваDOM.
Конструкторы класса
public DOMResult()
public DOMResult(Node n)
public DOMResult(Node node, String systemID)
Первый и второй конструкторы создают соответственно пустой объект и вывода для заданного узла n(это должен быть либо узел типаDocument, либо узелDocumentFragment, либо узел типаElement, т.е. узел, который может иметь дочерние узлы). Третий конструктор задает дополнительно системный идентификатор в форме базовогоURI.
В классе DOMResult задано поле
public static final String FEATURE.
Если метод getFeature()классаTransformerFactoryвозвращаетtrueдля значенияFEATURE, указанного в качестве аргумента метода, то объектTransformerподдерживает адресат вывода данного типа.
Методы
public Node getNode()
public void setNode(Node node)
позволяют получить или установить выходное дерево DOM(узелnodeдолжен иметь один из типов, перечисленных выше). МетодыgetSystemId() иsetSystemId() действуют аналогично соответствующим методам классаDOMSource.
5.2.3.3.3. Средства преобразования для потоков ввода-вывода
Средства преобразования для потоков ввода-вывода определены в классах 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);
Файл: