Разделы презентаций


XML

Содержание

План лекцииОбщие принципыDocument type definitionSAX и DOMРабота с SAX и DOM в JavaЗапись XML в JavaXML-сериализация в Java

Слайды и текст этой презентации

Слайд 1XML
© Составление, Будаев Д.С., Гаврилов А.В., 2013
Лекция 13
УНЦ «Инфоком»
Самара
2013

XML© Составление, Будаев Д.С., Гаврилов А.В., 2013Лекция 13УНЦ «Инфоком»Самара2013

Слайд 2План лекции
Общие принципы

Document type definition

SAX и DOM

Работа с SAX и

DOM в Java

Запись XML в Java

XML-сериализация в Java

План лекцииОбщие принципыDocument type definitionSAX и DOMРабота с SAX и DOM в JavaЗапись XML в JavaXML-сериализация в

Слайд 3У истоков
Standard Generalized Markup Language (SGML)
Предназначался для описания структуры сложных

документов
Был разработан в 1970 году
Основные цели:
Все документы должны быть выполнены

в строгом соответствии с правилами
Уменьшение количества документации
У истоковStandard Generalized Markup Language (SGML)Предназначался для описания структуры сложных документовБыл разработан в 1970 годуОсновные цели:Все документы

Слайд 4Наследники
Hypertext Markup Language (HTML) Язык разметки гипертекста (описание представления Web-страницы)

Extensible Markup

Language (XML) Язык для описания иерархических данных (портируемое хранение данных) http://www.w3.org/http://www.w3.org/XML/

НаследникиHypertext Markup Language (HTML) Язык разметки гипертекста (описание представления Web-страницы)Extensible Markup Language (XML) Язык для описания иерархических

Слайд 5Отличия XML от HTML
XML чувствителен к регистру
В XML нужно закрывать

тэги
В XML часто встречаются тэги, одновременно открывающие и закрывающие

/>
В XML значения атрибутов должны быть заключены в кавычки
В XML все атрибуты должны иметь значения
Отличия XML от HTMLXML чувствителен к региструВ XML нужно закрывать тэгиВ XML часто встречаются тэги, одновременно открывающие

Слайд 6Пример XML


Helvetica 36

Times Roman 12
400 200

0
50
100


Times Roman
Helvetica


Пример XML    Helvetica 36   Times Roman 12  400 200

Слайд 7Структура XML-документа
Заголовок



Объявления типа документа


Корневой элемент




web-app PUBLIC "-//Sun Microsystems, Inc.
//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">


Структура XML-документаЗаголовокОбъявления типа документаКорневой элемент

Слайд 8Структура XML-документа
Смешанное наполнение не рекомендуется



Существуют атрибуты


Helvetica
36


Helvetica
36

Структура XML-документаСмешанное наполнение не рекомендуетсяСуществуют атрибуты	Helvetica	36	Helvetica	36

Слайд 9Некоторые инструкции
Символы

Стандартные символы

Инструкции обработки

Комментарии

é, ™
< > & " '

This is a comment. -->

Некоторые инструкцииСимволыСтандартные символыИнструкции обработкиКомментарииé, ™< > & " '

Слайд 10Правильный документ
Начинается с объявления
Содержит один уникальный корневой элемент
Все открытые теги

закрываются
Учтена чувствительность к регистру
Теги корректно вложены друг в друга
Значения всех

атрибутов заключены в кавычки
Специальные символы задаются с помощью инструкций
Правильный документНачинается с объявленияСодержит один уникальный корневой элементВсе открытые теги закрываютсяУчтена чувствительность к региструТеги корректно вложены друг

Слайд 11Document Type Definition (DTD)
Содержит правила, описывающие структуру документа
Транслятор может автоматически проверять

документ на соответствие этим правилам
Описывает дочерние элементы и атрибуты для

каждого элемента
Включение в XML-документ






Document Type Definition (DTD)Содержит правила, описывающие структуру документаТранслятор может автоматически проверять документ на соответствие этим правиламОписывает дочерние

Слайд 12Регулярные выражения

Регулярные выражения

Слайд 13Примеры выражений
Описание меню


Описание шрифта


size (#PCDATA)>

Описание главы в книге
(intro,(heading,(para|image|table|note)+)+)>

Примеры выраженийОписание менюОписание шрифтаОписание главы в книге(intro,(heading,(para|image|table|note)+)+)>

Слайд 14Описание атрибутов: типы

Описание атрибутов: типы

Слайд 15Описание атрибутов: значения

Описание атрибутов: значения

Слайд 16Примеры выражений



gridbag (row)*>


CDATA "1">

|SOUTHEAST|SOUTH|SOUTHWEST|WEST|NORTHWEST)
"CENTER">



Слайд 17XML Schema
Предназначена для того же, что и DTD
Для описания правил

используется непосредственно XML
Имеет более гибкие возможности, чем DTD
Расширяема
Более гибкие возможности
Есть

понятие типа данных
Есть понятие пространства имен
Сложнее в восприятии и программировании средств, ее обрабатывающих
www.w3.org/XML/Schema http://www.w3schools.com/Schema/default.asp
XML SchemaПредназначена для того же, что и DTDДля описания правил используется непосредственно XMLИмеет более гибкие возможности, чем

Слайд 18Поддержка типов данных
Проще описывать допустимое содержимое документа
Проще проверять корректность данных
Проще

накладывать ограничения на данные
Проще определять формат данных

Поддержка типов данныхПроще описывать допустимое содержимое документаПроще проверять корректность данныхПроще накладывать ограничения на данныеПроще определять формат данных

Слайд 19XML Schema описывается на XML
Не требуется изучение еще одного языка
Вы

можете использовать свой любимый XML-редактор для работы со схемой
Вы можете

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

Слайд 20Документ и тип DTD


Tove
Jani
Reminder
Don't forget

me this weekend!



from (#PCDATA)>


Документ и тип DTD Tove Jani Reminder Don't forget me this weekend!

Слайд 21XML Schema для документа















XML Schema для документа

Слайд 22Указание типа документа





-->






Указание типа документа

Слайд 23Extensible Stylesheet Language (XSL)
Комплекс технологий, связанных с преобразованием и представлением

XML-документов
Обычно используется для преобразования документов в XML, HTML, текст и

PDF (XSL-FO)
XSL Transformations (XSLT) – язык, на котором описываются правила преобразования
XPath – язык, позволяющий формулировать используемые в процессе преобразования выражения, использующие различные фрагменты документа
http://www.w3.org/Style/XSL/ http://www.w3schools.com/xsl/
Extensible Stylesheet Language (XSL)Комплекс технологий, связанных с преобразованием и представлением XML-документовОбычно используется для преобразования документов в XML,

Слайд 24XPath
Вспомогательный язык, позволяющий обращаться к элементам документа
Имя элемента представляется в

виде пути /bookstore/book/title
Обращение может происходить и к атрибутам
http://www.w3.org/TR/xpath http://www.w3schools.com/Xpath/default.asp

XPathВспомогательный язык, позволяющий обращаться к элементам документаИмя элемента представляется в виде пути /bookstore/book/titleОбращение может происходить и к

Слайд 25Примеры выражений XPath

Примеры выражений XPath

Слайд 26Принципы XSL
Контекстно-зависимый язык
Основные элементы – выводимый текст и шаблоны
Текст просто

выводится
Шаблоны описывают некоторые действия
Могут быть вызваны явно
Могут быть вызваны неявно,

по условию совпадения шаблона
Имеются средства управления ходом выполнения
Позволяет создавать и вызывать бибилиотеки с помощью тега
Принципы XSLКонтекстно-зависимый языкОсновные элементы – выводимый текст и шаблоныТекст просто выводитсяШаблоны описывают некоторые действияМогут быть вызваны явноМогут

Слайд 27Пример XML (catalog.xml)




Empire Burlesque
Bob Dylan

USA
Columbia
10.90
1985


Hide your heart
Bonnie Tyler
UK
CBS Records
9.90
1988



Пример XML (catalog.xml)      Empire Burlesque   Bob Dylan   USA

Слайд 28Пример XSL (tranformation.xsl)





My CD Collection


Title
Artist












Пример XSL (tranformation.xsl)    My CD Collection

Слайд 29Результат трансформации

Результат трансформации

Слайд 30Обработка XML
Два подхода
Simple API for XML (SAX) Порождает события в процессе

чтения XML документа

Document Object Model (DOM) Представляет XML документ в форме

древовидной структуры элементов
Обработка XMLДва подходаSimple API for XML (SAX) Порождает события в процессе чтения XML документаDocument Object Model (DOM)

Слайд 31Логика SAX

Логика SAX

Слайд 32Логика DOM

Логика DOM

Слайд 33Особенности SAX и DOM

Особенности SAX и DOM

Слайд 34Работа с XML в Java
Стандартные интерфейсы
В оригинале описаны на Interface

Definition Language (OMG IDL)
Пакет org.w3c.dom
Пакет org.xml.sax
Реализующие классы
Предоставляются отдельно…
JAVA API for

XML Processing (JAXP) Пакет javax.xml
Работа с XML в JavaСтандартные интерфейсыВ оригинале описаны на Interface Definition Language (OMG IDL)Пакет org.w3c.domПакет org.xml.saxРеализующие классыПредоставляются

Слайд 35Работа с SAX
Обработку документа производит транслятор, передающий информацию зарегистрировавшимся обработчикам

событий

Обработчики должны реализовывать интерфейсы
org.xml.sax.ContentHandler
org.xml.sax.DTDHandler
org.xml.sax.EntityResolver
org.xml.sax.ErrorHandler
org.xml.sax.Locator
org.xml.sax.ext.DeclHandler
org.xml.sax.ext.EntityResolver2
org.xml.sax.ext.LexicalHandler
org.xml.sax.ext.Locator2

Работа с SAXОбработку документа производит транслятор, передающий информацию зарегистрировавшимся обработчикам событийОбработчики должны реализовывать интерфейсыorg.xml.sax.ContentHandlerorg.xml.sax.DTDHandlerorg.xml.sax.EntityResolverorg.xml.sax.ErrorHandlerorg.xml.sax.Locatororg.xml.sax.ext.DeclHandlerorg.xml.sax.ext.EntityResolver2org.xml.sax.ext.LexicalHandlerorg.xml.sax.ext.Locator2

Слайд 36Пакет javax.xml.parsers
Класс SAXParserFactory Образец проектирования Singleton, позволяет настроить и получить экземпляр

фабрики для производства SAXParser

Класс SAXParser Непосредственно транслятор, экземпляры получаются от фабрики

SAXParserFactory
Пакет javax.xml.parsersКласс SAXParserFactory Образец проектирования Singleton, позволяет настроить и получить экземпляр фабрики для производства SAXParserКласс SAXParser Непосредственно

Слайд 37Семантика документа
Возникающие события
startElement / endElement Открывающий и закрывающий тэг
characters Символы
startDocument / endDocument Начало

и конец документа
Интерфейс ContentHandler
startElement()

endElement()

characters()

startDocument()

endDocument()

Семантика документаВозникающие событияstartElement / endElement Открывающий и закрывающий тэгcharacters СимволыstartDocument / endDocument Начало и конец документаИнтерфейс ContentHandlerstartElement()endElement()characters()startDocument()endDocument()

Слайд 38Создание обработчика событий
Реализация нужного интерфейса, настройка на него используемого транслятора

Использование

класса org.xml.sax.helpers.DefaultHandler или org.xml.sax.helpers.DefaultHandler2 реализующих все интерфейсы обработки событий (все

методы имеют пустые тела)
Создание обработчика событийРеализация нужного интерфейса, настройка на него используемого транслятораИспользование класса org.xml.sax.helpers.DefaultHandler или org.xml.sax.helpers.DefaultHandler2 реализующих все интерфейсы

Слайд 39Пример. Файл XML



Tom
King
Boss
100500


Ben
Gum
Bubble
100000


Пример. Файл XML			Tom		King		Boss		100500				Ben		Gum		Bubble		100000

Слайд 40Пример. Часть 1
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class ReadXMLFile

{
public static void main(String argv[]) {
try {

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();

DefaultHandler handler = new DefaultHandler() {
boolean bfname = false;
boolean blname = false;
boolean bnname = false;
boolean bsalary = false;
...
Пример. Часть 1import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class ReadXMLFile { public static void main(String argv[]) {

Слайд 41Пример. Часть 2
public void startElement(String uri, String localName, String

qName,

Attributes attributes) throws SAXException {
System.out.println("Start Element: " + qName);
if (qName.equalsIgnoreCase("FIRSTNAME")) {
bfname = true;
}
if (qName.equalsIgnoreCase("LASTNAME")) {
blname = true;
}
if (qName.equalsIgnoreCase("NICKNAME")) {
bnname = true;
}
if (qName.equalsIgnoreCase("SALARY")) {
bsalary = true;
}
}
...
Пример. Часть 2 public void startElement(String uri, String localName, String qName,

Слайд 42Пример. Часть 3
...
public void endElement(String uri, String

localName,
String qName) throws SAXException

{
System.out.println("End Element: " + qName);
}
public void characters(char ch[], int start, int length)
throws SAXException {
if (bfname) {
System.out.println("First Name: " +
new String(ch, start, length));
bfname = false;
}
if (blname) {
System.out.println("Last Name: " + new String(ch, start, length));
blname = false;
}
...
Пример. Часть 3 ...  public void endElement(String uri, String localName, 			     String

Слайд 43Пример. Часть 4
...
if (bnname) {

System.out.println("Nick Name: " +
new String(ch, start, length));

bnname = false;
}
if (bsalary) {
System.out.println("Salary: " + new String(ch, start, length));
bsalary = false;
}
}
};

saxParser.parse("xmlfile.xml", handler);

} catch (Exception e) {
e.printStackTrace();
}
}
Пример. Часть 4  ...   if (bnname) {   System.out.println(

Слайд 44Пример. Результат
Start Element: company
Start Element: staff
Start Element: firstname
First Name: Tom
End

Element: firstname
Start Element: lastname
Last Name: King
End Element: lastname
Start Element: nickname
Nick

Name: Boss
End Element: nickname
Start Element: salary
Salary: 100500
End Element: salary
End Element: staff
...

...
Start Element: staff
Start Element: firstname
First Name: Ben
End Element: firstname
Start Element: lastname
Last Name: Gum
End Element: lastname
Start Element: nickname
Nick Name: Bubble
End Element: nickname
Start Element: salary
Salary: 100000
End Element: salary
End Element: staff
End Element: company

Пример. РезультатStart Element: companyStart Element: staffStart Element: firstnameFirst Name: TomEnd Element: firstnameStart Element: lastnameLast Name: KingEnd Element:

Слайд 45Работа с DOM
Считывание документа, опять же, реализует транслятор

Результат считывания возвращается

в виде дерева объектов, реализующих интерфейс org.w3c.dom.Node

Дальнейшая обработка ведется

уже на уровне бизнес-логики
Работа с DOMСчитывание документа, опять же, реализует трансляторРезультат считывания возвращается в виде дерева объектов, реализующих интерфейс org.w3c.dom.Node

Слайд 46Пакет org.w3c.dom
Базовый интерфейс Node, содержит основные методы работы с узлом
От

него наследуют специфические интерфейсы для конкретных видов узлов:
Document
Element
Text
Comment
Attr
и др.
Каждый интерфейс

добавляет новую функциональность (например Document, является фабрикой для создания остальных узлов)
Пакет org.w3c.domБазовый интерфейс Node, содержит основные методы работы с узломОт него наследуют специфические интерфейсы для конкретных видов

Слайд 47Пакет javax.xml.parsers
Класс DocumentBuilderFactory Образец проектирования Singleton, позволяет настроить и получить экземпляр

фабрики для производства DocumentBuilder

Класс DocumentBuilder Непосредственно транслятор, экземпляры получаются от фабрики

DocumentBuilderFactory
Пакет javax.xml.parsersКласс DocumentBuilderFactory Образец проектирования Singleton, позволяет настроить и получить экземпляр фабрики для производства DocumentBuilderКласс DocumentBuilder Непосредственно

Слайд 48Пример. Файл XML



Tom
King
Boss
100500


Ben
Gum
Bubble
100000


Пример. Файл XML			Tom		King		Boss		100500				Ben		Gum		Bubble		100000

Слайд 49Пример. Часть 1
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.*;

public class ReadXMLFile_DOM {
public

static void main(String argv[]) {
try {

File fXmlFile = new File("xmlfile.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
System.out.println("Root element : " + doc.getDocumentElement().getNodeName());

NodeList nList = doc.getElementsByTagName("staff");
System.out.println("----------------------------");
...
Пример. Часть 1import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.*;public class ReadXMLFile_DOM { public static void main(String argv[]) {  try

Слайд 50Пример. Часть 2
...
for (int temp =

0; temp < nList.getLength(); temp++) {
Node nNode

= nList.item(temp);
System.out.println("\nCurrent Element : " + nNode.getNodeName());

if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;

System.out.println("Staff id : " +
eElement
.getAttribute("id"));

System.out.println("First Name : " +
eElement
.getElementsByTagName("firstname")
.item(0)
.getTextContent());
...
Пример. Часть 2  ...  for (int temp = 0; temp < nList.getLength(); temp++) {

Слайд 51Пример. Часть 3
System.out.println("Last Name : "

+
eElement
.getElementsByTagName("lastname")
.item(0).getTextContent());

System.out.println("Nick Name

: " +
eElement
.getElementsByTagName("nickname")
.item(0).getTextContent());

System.out.println("Salary : " +
eElement
.getElementsByTagName("salary")
.item(0)
.getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Пример. Часть 3    System.out.println(

Слайд 52Пример. Результат
Root element : company
----------------------------

Current Element : staff
Staff id :

1001
First Name : Tom
Last Name : King
Nick Name : Boss
Salary

: 100500

Current Element : staff
Staff id : 1002
First Name : Ben
Last Name : Gum
Nick Name : Bubble
Salary : 100000
Пример. РезультатRoot element : company----------------------------Current Element : staffStaff id : 1001First Name : TomLast Name : KingNick

Слайд 53Запись XML
Средствами пакета javax.xml.transform

Средствами API третьих фирм JDOM (www.jdom.org)
Тот же DOM, но

реализованный более дружелюбно для Java
Поддерживает XPath и XSLT

Запись XMLСредствами пакета javax.xml.transformСредствами API третьих фирм JDOM (www.jdom.org)Тот же DOM, но реализованный более дружелюбно для JavaПоддерживает

Слайд 54Пример. Часть 1
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import java.io.IOException;

public

class WriterDOM {
public static void main(String[] args) {

try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("test.xml");
DOMSource dom_source = new DOMSource(document);
StreamResult out_stream = new StreamResult("test2.xml");
...
Пример. Часть 1import org.w3c.dom.*;import org.xml.sax.SAXException;import javax.xml.parsers.*;import javax.xml.transform.*;import javax.xml.transform.dom.*;import javax.xml.transform.stream.*;import java.io.IOException;public class WriterDOM { public static void main(String[]

Слайд 55Пример. Часть 2
...
TransformerFactory tFactory

= TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(/* !!!! */);


// Вспомогательные действия, связанные с тем, что такая
// элементарная трансформация не "копирует" директиву
// !DOCTYPE. В зависимости от PUBLIC- или SYSTEM-описания DTD,
// можно использовать разные свойства transformer'а

DocumentType docType = document.getDoctype();
if (docType != null) {
String systemID = docType.getSystemId();
String publicID = docType.getPublicId();
String res = publicID + "\" \"" + systemID;
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, systemID);
//transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, res);
}
...
Пример. Часть 2   ...   TransformerFactory tFactory = TransformerFactory.newInstance();   Transformer transformer =

Слайд 56Пример. Часть 3
...
// Прочие настройки

преобразователя

transformer.transform (dom_source, out_stream);
} catch (ParserConfigurationException

e) {
e.printStackTrace();
} catch (TransformerConfigurationException e){
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
}
Пример. Часть 3  ...   // Прочие настройки преобразователя   transformer.transform (dom_source, out_stream);

Слайд 57Настройка преобразователя
Метод создания объекта преобразователя TransformerFactory.newTransformer() имеет 2 формы:
без аргументов

– будет создаваться «копия» исходного документа
с аргументом типа Source –

ссылка на загруженный объект xml-документа, в котором описано XSL-преобразование

Метод Transformer.setOutputProperty() позволяет настроить некоторые параметры вывода (см. класс OutputKeys)
Настройка преобразователяМетод создания объекта преобразователя TransformerFactory.newTransformer() имеет 2 формы:без аргументов – будет создаваться «копия» исходного документас аргументом

Слайд 58Пример XSL-преобразования
import java.io.*;
import java.net.URISyntaxException;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class XSLTWriterDOM {
public

static void main(String[] args) throws IOException, URISyntaxException, TransformerException {

TransformerFactory

factory = TransformerFactory.newInstance();
Source xslt = new StreamSource(new File("transformation.xsl"));
Transformer transformer = factory.newTransformer(xslt);

Source text = new StreamSource(new File("catalog.xml"));
transformer.transform(text, new StreamResult(new File("out.xml")));
}
}
Пример XSL-преобразованияimport java.io.*;import java.net.URISyntaxException;import javax.xml.transform.*;import javax.xml.transform.stream.*;public class XSLTWriterDOM { public static void main(String[] args) throws IOException, 				URISyntaxException,

Слайд 59Размышления на тему
Итак, что мы научились делать:
Считывать информацию из XML-документов
SAX
DOM
Записывать

информацию в XML-документы
Какой еще инструмент был бы удобен?..
А если бы

мы умели записывать и считывать из XML непосредственно объекты Java?..
Размышления на темуИтак, что мы научились делать:Считывать информацию из XML-документовSAXDOMЗаписывать информацию в XML-документыКакой еще инструмент был бы

Слайд 60Шаг 1. Сохранение JavaBeans
В версии JavaSE 1.4 для объектов JavaBeans

появились механизмы, сходные с сериализацией
Реализовывали их классы java.beans.XMLEncoder и java.beans.XMLDecoder
Недостаток:

механизм основан на интроспекции, требует соблюдения правил именования и т.д.
Шаг 1. Сохранение JavaBeansВ версии JavaSE 1.4 для объектов JavaBeans появились механизмы, сходные с сериализациейРеализовывали их классы

Слайд 61Пример. Часть 1
XMLEncoder e = new XMLEncoder(

new BufferedOutputStream(

new FileOutputStream("Test.xml"))); e.writeObject(new JButton("Hello, world"));
e.close();





frame1



0 0
200 200


Пример. Часть 1XMLEncoder e = new XMLEncoder(        new BufferedOutputStream(

Слайд 62Пример. Часть 2




Hello





true



Пример. Часть 2

Слайд 63Шаг 2. Java Architecture for XML Binding (JAXB)
В версии JavaSE

1.5 появились новые механизмы JAXB
Связанные с ними классы находятся в

пакете javax.xml.bind
Позволяют производить «сериализацию» объектов и их структур в XML
Классы объектов должны быть специальным образом подготовлены
Активно использует механизм аннотаций…
Шаг 2. Java Architecture for XML Binding (JAXB)В версии JavaSE 1.5 появились новые механизмы JAXBСвязанные с ними

Слайд 64Пример. RootClass
import javax.xml.bind.annotation.*;

@XmlRootElement
public class RootClass {
private int value;

@XmlElement

private NodeClass name = new NodeClass();

public RootClass() {

value = 0;
name.setInnerValue("");
}

public NodeClass getName() { return name; }
public int getValue() { return value; }
public void setValue(int newValue) { value = newValue; }
}
Пример. RootClassimport javax.xml.bind.annotation.*;@XmlRootElementpublic class RootClass { private int value; @XmlElement private NodeClass name = new NodeClass(); public

Слайд 65Пример. NodeClass (1)
public class NodeClass {
private String innerValue =

"";
private double rval = Math.random();

public String getInnerValue() {

return innerValue;
}

public void setInnerValue(String newInnerValue) {
innerValue = newInnerValue;
}

public void print() {
System.out.println(rval);
}
}
Пример. NodeClass (1)public class NodeClass { private String innerValue =

Слайд 66Пример. WriterJAXB
import javax.xml.bind.*;
import java.io.*;

public class WriterJAXB {
public static void

main(String[] args){
try {
RootClass object1 =

new RootClass();
object1.setValue(5);
object1.getName().setInnerValue("ABC");
JAXBContext jc = JAXBContext.newInstance(RootClass.class);
Marshaller m = jc.createMarshaller();
OutputStream os = new FileOutputStream("test.xml");
m.marshal(object1, os);
os.close();
}
catch (JAXBException e) {e.printStackTrace();}
catch (FileNotFoundException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
}
}
Пример. WriterJAXBimport javax.xml.bind.*;import java.io.*;public class WriterJAXB { public static void main(String[] args){  try {

Слайд 67Содержимое файла после выполнения (1)
Что сохранено:
значение name, помеченное аннотацией
значение innerValue,

не помеченное аннотацией
значение rval не сохранено
значение value, не помеченное аннотацией
Сохранились

элементы, являющиеся свойствами JavaBeans




ABC

5

Содержимое файла после выполнения (1)Что сохранено:значение name, помеченное аннотациейзначение innerValue, не помеченное аннотациейзначение rval не сохраненозначение value,

Слайд 68Пример. NodeClass (2)
import javax.xml.bind.annotation.*;
public class NodeClass {
private String innerValue

= "";
@XmlElement
private double rval = Math.random();

public String

getInnerValue() {
return innerValue;
}

public void setInnerValue(String newInnerValue) {
innerValue = newInnerValue;
}

public void print() {
System.out.println(rval);
}
}
Пример. NodeClass (2)import javax.xml.bind.annotation.*;public class NodeClass { private String innerValue =

Слайд 69Содержимое файла после выполнения (2)
Сохранились элементы, являющиеся свойствами JavaBeans

Сохранились элементы,

помеченные аннотациями



0.9878295088863659
ABC


5

Содержимое файла после выполнения (2)Сохранились элементы, являющиеся свойствами JavaBeansСохранились элементы, помеченные аннотациями   0.9878295088863659  ABC

Слайд 70Пакет javax.xml.bind.annotation
Содержит разнообразнейшие аннотации, описывающие параметры маршалинга и анмаршалинга
@XmlRootElement Обозначает корневой

элемент сохраняемой структуры
@XmlElement Обозначает поля и свойства (для JavaBeans)
@XmlTransient Обозначает то, что

поле не будет сохраняться
Пакет javax.xml.bind.annotationСодержит разнообразнейшие аннотации, описывающие параметры маршалинга и анмаршалинга@XmlRootElement Обозначает корневой элемент сохраняемой структуры@XmlElement Обозначает поля и

Слайд 71Пример. ReaderJAXB
import javax.xml.bind.*;
import java.io.*;

public class ReaderJAXB {
public static void

main(String[] args) {
try {
JAXBContext jc

= JAXBContext.newInstance(RootClass.class);
InputStream is = new FileInputStream("test.xml");
Unmarshaller um = jc.createUnmarshaller();
RootClass object2 = (RootClass) um.unmarshal(is);
System.out.println(object2.getValue());
System.out.println(object2.getName().getInnerValue());
is.close();
}
catch (JAXBException e) {e.printStackTrace();}
catch (FileNotFoundException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
}
}
Пример. ReaderJAXBimport javax.xml.bind.*;import java.io.*;public class ReaderJAXB { public static void main(String[] args) {  try {

Слайд 72
Спасибо за внимание!

Спасибо за внимание!

Слайд 73Дополнительные источники
Арнолд, К. Язык программирования Java [Текст] / Кен Арнолд,

Джеймс Гослинг, Дэвид Холмс. – М. : Издательский дом «Вильямс»,

2001. – 624 с.
Вязовик, Н.А. Программирование на Java. Курс лекций [Текст] / Н.А. Вязовик. – М. : Интернет-университет информационных технологий, 2003. – 592 с.
Эккель, Б. Философия Java [Текст] / Брюс Эккель. – СПб. : Питер, 2011. – 640 с.
Шилдт, Г. Java 2, v5.0 (Tiger). Новые возможности [Текст] / Герберт Шилдт. – СПб. : БХВ-Петербург, 2005. – 206 с.
JavaSE at a Glance [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/overview/index.html, дата доступа: 21.10.2011.
JavaSE APIs & Documentation [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/documentation/api-jsp-136079.html, дата доступа: 21.10.2011.
Дополнительные источникиАрнолд, К. Язык программирования Java [Текст] / Кен Арнолд, Джеймс Гослинг, Дэвид Холмс. – М. :

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика