Сначала определите два примера класса класса и класс для последующих примеров демонстраций
Кода -копия выглядит следующим образом:
Пакет Cn.lzrabbit;
открытый класс класс {
Частный int classaid;
Private String ClassAname;
Частный класс класса;
public int getClascaid () {
вернуть Classaid;
}
public void setCaslead (int classaid) {
this.classaid = classaid;
}
public String getClassAname () {
вернуть ClassAname;
}
public void setClassAname (String classAname) {
this.classAname = classAname;
}
public classb getClassb () {
вернуть класс;
}
public void setClassb (classb classb) {
this.classb = classb;
}
}
Класс
Кода -копия выглядит следующим образом:
Пакет Cn.lzrabbit;
Public Class Classb {
частный int classbid;
Private String classbName;
public int getClassbid () {
вернуть Classbid;
}
public void setclassbid (int classbid) {
this.classbid = classbid;
}
public String getClassBname () {
вернуть ClassbName;
}
public void setclassbname (String classbName) {
this.classbname = classbname;
}
}
Класс
Xmlutil для сериализации
Кода -копия выглядит следующим образом:
Пакет Cn.lzrabbit;
Импорт java.io.stringReader;
импортировать java.io.stringwriter;
импортировать javax.xml.bind.*;
открытый класс Xmlutil {
public Static String toxml (Object obj) {
пытаться {
Jaxbcontext context = jaxbcontext.newinstance (obj.getClass ());
Marshaller marshaller = context.createmarshaller ();
Marshaller.setProperty (marshaller.jaxb_encoding, "utf-8"); // // формат кодирования
marshaller.setproperty (marshaller.jaxb_formatted_output, true); // Снижение строки сгенерированной xml строки
Marshaller.setProperty (marshaller.jaxb_fragment, false); // Будут ли опустить информацию о объявлении заголовка XM
Stringwriter writer = new StringWriter ();
Marshaller.marshal (obj, писатель);
return writer.tostring ();
} catch (Exception e) {
бросить новое runtimeexception (e);
}
}
@Suppresswarnings ("не контролировано")
public static <t> t fromxml (string xml, class <t> valuetype) {
пытаться {
Jaxbcontext context = jaxbcontext.newinstance (valuetype);
Unmarshaller unmarshaller = context.createunmarshaller ();
return (t) unmarshaller.unmarshal (new StringReader (XML));
} catch (Exception e) {
бросить новое runtimeexception (e.getmessage ());
}
}
}
Xmlutil
Звонок заключается в следующем:
Кода -копия выглядит следующим образом:
Пакет Cn.lzrabbit;
открытый класс mainrun {
/**
* @param args
*/
public static void main (string [] args) {
Classb classb = new Classb ();
classb.setclassbid (22);
classb.setclassbname ("b2");
Classa classa = new Classa ();
classa.setclassaid (11);
classa.setclassaname ("a1");
classa.setclassb (classb);
System.out.println (xmlutil.toxml (classa));
}
}
МАЙНРУН
Результат вывода заключается в следующем:
Кода -копия выглядит следующим образом:
<? xml version = "1.0" Encoding = "UTF-8" STANDALONE = "Да"?>
<Classa>
<classaid> 11 </classaid>
<classaname> a1 </classaname>
<Classb>
<classbid> 22 </classbid>
<classbname> b2 </classbname>
</classb>
</classa>
Вот несколько моментов, чтобы отметить
1. Добавьте аннотацию @xmlrootelement в сериализованный класс, в противном случае сообщается об ошибке (об эксплуатации ошибки очень ясна, поэтому я не буду публиковать ее здесь)
2JAXB сериализует Getters и Setters по умолчанию при сериализации XML, и Getters и Setters должны появляться парами, прежде чем они будут сериализованы.
3 Имена атрибутов. На что вам нужно обратить внимание на @xmleLement может быть помещен на Getter или Setter, но можно разместить только один, что означает, что аннотация @xmleLement не может быть использована на Getter и Setter одновременно
4 Как управлять именем корневого узла?
Используйте @xmlrootelement, чтобы указать атрибут имени, например @xmlrootelement (name = "classa")
5 Как добавить пространство имен, чтобы указать атрибут пространства имен с помощью @xmlrootelement (namespace = "cn.lzrabbit")
6 Как точно контролировать каждое имя атрибута
Автоматическое преобразование JAXB в нижнюю букву первой буквы приведет к появлению непредсказуемых атрибутов.
7 Как реализовать сериализацию с использованием полевых полей вместо сеттеров и Getters
Добавьте аннотацию @xmlaccessortype (xmlaccesstype.field) в классе, который вы хотите использовать, и укажите его как xmlaccesstype.field. .
Ниже приведен пример кода с использованием приведенной выше аннотации
Кода -копия выглядит следующим образом:
@Xmlrootelement (namespace = "cn.lzrabbit")
@Xmlaccessortype (xmlaccesstype.field)
открытый класс класс {
Частный int classaid;
@Xmlelement (name = "classaname")
Private String ClassAname;
Частный класс класса;
public int getClascaid () {
вернуть Classaid;
}
public void setCaslead (int classaid) {
this.classaid = classaid;
}
public String getClassAname () {
вернуть ClassAname;
}
public void setClassAname (String classAname) {
this.classAname = classAname;
}
public classb getClassb () {
вернуть класс;
}
public void setClassb (classb classb) {
this.classb = classb;
}
}
@Xmlrootelement
@Xmlaccessortype (xmlaccesstype.field)
Public Class Classb {
частный int classbid;
Private String classbName;
public int getClassbid () {
вернуть Classbid;
}
public void setclassbid (int classbid) {
this.classbid = classbid;
}
public String getClassBname () {
вернуть ClassbName;
}
public void setclassbname (String classbName) {
this.classbname = classbname;
}
}
Выход XML
Кода -копия выглядит следующим образом:
<? xml version = "1.0" Encoding = "UTF-8" STANDALONE = "Да"?>
<ns2: classa xmlns: ns2 = "cn.lzrabbit">
<classaid> 11 </classaid>
<classaname> a1 </classaname>
<Classb>
<classbid> 22 </classbid>
<classbname> b2 </classbname>
</classb>
</ns2: classa>
PS: Вот несколько онлайн -инструментов для вашей ссылки:
Онлайн инструмент взаимного преобразования XML/JSON:
http://tools.vevb.com/code/xmljson
Формат XML онлайн/сжатие XML онлайн:
http://tools.vevb.com/code/xmlformat
XML онлайн -сжатие/форматирование:
http://tools.vevb.com/code/xml_format_compress