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