Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

ERROR - 14 : 41 - cvc-attribute.3: The value 'mit' of attribute 'login' on element 'student' is not valid with respect to its type, 'login'.

В текстовых блоках нельзя использовать символы | Древовидная и событийная модели | Событийная модель | Parsing started | Org.w3c.dom.Text | Изменение XML-документа | XMLStreamConstants.ENTITY_DECLARATION | Student: Login: mit Faculty: mmf |


Если допустить синтаксическую ошибку в XML-документе, например, удалить закрывающую скобку в элементе telephone, будет выведено сообщение о фатальной ошибке:

FATAL - 7: 26 - Element type "telephone2456474" must be followed by either attribute specifications, ">" or "/>".

JAXB

В Java разработаны серьезные способы взаимодействия с XML. Начиная
с версии Java 6, эти механизмы включены в JDK.

Следующий пример на основе объекта класса Student создает структуру документа XML и сохраняет в ней информацию из объекта.

/* пример # 3: компонент JavaBean: Student.java */

package chapt16.entity;

import javax.xml.bind.annotation.*;

import javax.xml.bind.annotation.adapters.*;

 

@XmlRootElement

@XmlAccessorType(XmlAccessType. FIELD)

@XmlType(name = "Student", propOrder = {

"name",

"telephone",

"address"

}) //задание последовательности элементов XML

public class Student {

@XmlAttribute(required = true)

@XmlJavaTypeAdapter(CollapsedStringAdapter. class)

@XmlID

private String login;

@XmlElement(required = true)

private String name;

@XmlAttribute(required = true)

private String faculty;

@XmlElement(required = true)

private int telephone;

@XmlElement(required = true)

private Address address = new Address();

public Student(){} //необходим для генерации XML

public Student(String login, String name,

String faculty, int telephone, Address address) {

this. login = login;

this. name = name;

this. faculty = faculty;

this. telephone = telephone;

this. address = address;

}

public String getLogin() {

return login;

}

public void setLogin(String login) {

this. login = login;

}

public String getName() {

return name;

}

public void setName(String name) {

this. name = name;

}

public String getFaculty() {

return faculty;

}

public void setFaculty(String faculty) {

this. faculty = faculty;

}

public int getTelephone() {

return telephone;

}

public void setTelephone(int telephone) {

this. telephone = telephone;

}

public Address getAddress() {

return address;

}

public void setAddress(Address address) {

this. address = address;

}

public String toString() {

return "\nLogin: " + login + "\nName: "

+ name + "\nTelephone: " + telephone

+ "\nFaculty: " + faculty

+ address.toString();

}

@XmlRootElement

public static class Address { // внутренний класс

private String country;

private String city;

private String street;

 

public Address() {

}

public Address(String country, String city,

String street) {

this. country = country;

this. city = city;

this. street = street;

}

public String getCountry() {

return country;

}

public void setCountry(String country) {

this. country = country;

}

public String getCity() {

return city;

}

public void setCity(String city) {

this. city = city;

}

public String getStreet() {

return street;

}

public void setStreet(String street) {

this. street = street;

}

public String toString() {

return "\nAddress:"

+ "\n\tCountry: " + country

+ "\n\tCity: " + city

+ "\n\tStreet: " + street + "\n";

}

}

}

Класс Student в целом соответствует документу students.xml и схеме students.xsd.

Данный класс в дальнейшем будет использоваться для создания списков и множеств объектов на основе информации, извлеченной из XML-документа.

/* пример # 4: создание XML-документа на основе объекта: MarshalMain.java */

package chapt16.jaxb;

import javax.xml.bind.JAXBContext;

import javax.xml.bind.JAXBException;

import javax.xml.bind.Marshaller;

import chapt16.entity.Student;

import java.io.*;

 

public class MarshalMain {

public static void main(String[] args) {

try {

JAXBContext context =

JAXBContext. newInstance (Student. class);

Marshaller m = context.createMarshaller();

Student.Address addr =

new Student.Address("BLR","Minsk","Skoriny 4");

Student s = new Student("mendig", "Dmitry Terenya",

"rfe", 2066394, addr); //объект

m.marshal(s, new FileOutputStream("stud.xml"));

m.marshal(s, System. out); //на консоль

System. out. println("XML-файл создан");

} catch (FileNotFoundException e) {

System. out. println("XML-файл не найден");

e.printStackTrace();

} catch (JAXBException e) {

System. out. println("JAXB-исключения");

e.printStackTrace();

}

}

}

В результате компиляции и запуска программы будет создан XML-документ stud.xml:

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

<student faculty="rfe" login="mendig">

<name>Dmitry Terenya</name>

<telephone>2066394</telephone>

<address>

<city>Minsk</city>

<country>BLR</country>

<street>Skoriny 4</street>

</address>

</student>

Возможно обратное создание на основе XML-схемы классов на языке Java:

/* пример # 5: описание классов University, Course и перечисления Faculty в XSD-схеме: university.xsd*/

<schema xmlns="http://www.w3c.org/2001/XMLSchema"

xmlns:tns="http://www.university.net"

targetNamespace="http://www.university.net">

<element name="University">

<complexType>

<sequence>

<element name="faculty" type="tns:Faculty"/>

<element name="course" type="tns:Course"/>

</sequence>

</complexType>

</element>

<complexType name="Course">

<sequence>

<element name="name" type="string"/>

<element name="teacher" type="string"/>

</sequence>

</complexType>

<simpleType name="Faculty">

<restriction base="string">

<enumeration value="FPMI"></enumeration>

<enumeration value="MMF"></enumeration>

<enumeration value="Rfe"></enumeration>

</restriction>

</simpleType>

</schema>

Запуск выполняется с помощью командной строки:


Дата добавления: 2015-11-14; просмотров: 92 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Faculty CDATA #REQUIRED| Xjc university.xsd

mybiblioteka.su - 2015-2024 год. (0.014 сек.)