StudentElement.addContent(addressElement);

//«вложение» элемента <student> в элемент <students>

Root.addContent(studentElement);

}

//создание основного дерева XML-документа

Return new Document(root);

}

public static boolean saveDocument(String fileName,

Document doc) {

boolean complete = true;

XMLOutputter outputter = new XMLOutputter();

// запись XML-документа

try {

outputter.output(doc, new FileOutputStream(fileName));

} catch (FileNotFoundException e) {

e.printStackTrace();

complete = false;

} catch (IOException e) {

e.printStackTrace();

complete = false;

}

return complete;

}

}

/* пример # 11 : создание списка и запуск приложения : JDOMMainSaver.java*/

package chapt16.main;

import java.io.IOException;

import java.util.ArrayList;

import chapt16.entity.Student;

import chapt16.saver.dom.JDOMLogic;

 

public class JDOMMainSaver {

public static void main(String[] args) {

//создание списка студентов

ArrayList<Student> students = new ArrayList<Student> ();

for(int j = 1; j < 3; j++) {

Student st = new Student();

st.setName("Petrov" + j);

st.setLogin("petr" + j);

st.setFaculty("mmf");

st.setTelephone("454556"+ j*3);

Student.Address adr = st.getAddress();

adr.setCity("Minsk");

adr.setCountry("BLR");

adr.setStreet("Gaja, " + j);

st.setAddress(adr);

students.add(st);

}

//создание «дерева» на основе списка студентов

Document doc = JDOMLogic.create(students);

//сохранение «дерева» в XML-документе

if(JDOMLogic.saveDocument("studentsnew.xml", doc))

System.out.println("Документ создан");

Else

System.out.println("Документ НЕ создан");

}

}

В результате будет создан документstudentsnew.xml следующего со­держания:

<?xml version="1.0" encoding="UTF-8"?>

<studentsnew>

<student login="petr1" phone="4545563">

<faculty>mmf</faculty>

<name>Petrov1</name>

<address>

<country>BLR</country>

<city>Minsk</city>

<street>Gaja, 1</street>

</address>

</student>

<student login="petr2" phone="4545566">

<faculty>mmf</faculty>

<name>Petrov2</name>

<address>

<country>BLR</country>

<city>Minsk</city>

<street>Gaja, 2</street>

</address>

</student>

</studentsnew>

В этом примере был использован JDOM, основанный на идее "if something doesn't work, fix it".

StAX

StAX (Streaming API for XML), который еще называют pull-парсером, включен в JDK, начиная с версии Java SE 6. Он похож на SAX отсутствием объектной модели в памяти и последовательным продвижением по XML, но в StAX не требуется реализация интерфейсов, и приложение само командует StAX-парсеру перейти к следующему элементу XML. Кроме того, в отличие от SAX, данный парсер предлагает API для создания XML-документа.

Основными классами StAX являются XMLInputFactory, XMLStreamReader и XMLOutputFactory, XMLStreamWriter, которые соответственно используются для чтения и создания XML-документа. Для чтения XML надо получить ссылку на XMLStreamReader:

StringReader stringReader = new StringReader(xmlString);

XMLInputFactory inputFactory=XMLInputFactory.newInstance();

XMLStreamReader reader = inputFactory

CreateXMLStreamReader(stringReader);

после чего XMLStreamReader можно применять аналогично интерфейсу Iterator, используя методы hasNext() и next():

boolean hasNext() – показывает, есть ли еще элементы;

int next() – переходит к следующей вершине XML, возвращая ее тип.

Возможные типы вершин:

XMLStreamConstants.START_DOCUMENT

XMLStreamConstants.END_DOCUMENT

XMLStreamConstants.START_ELEMENT

XMLStreamConstants.END_ELEMENT

XMLStreamConstants.CHARACTERS

XMLStreamConstants.ATTRIBUTE

XMLStreamConstants.CDATA

XMLStreamConstants.NAMESPACE

XMLStreamConstants.COMMENT