Primeiro, defina duas classes de exemplo Classa e Classb para demonstrações de exemplo subsequentes
A cópia do código é a seguinte:
pacote cn.lzrabbit;
classe pública Classa {
private Int ClassAid;
String private Classaname;
Classb privado ClassB;
public int getClassaid () {
retornar classAid;
}
public void setClassaid (int ClassAid) {
this.ClaSsaid = ClassAid;
}
public String getClassaname () {
retornar classaname;
}
public void setClassaname (string classaname) {
this.classaname = classaname;
}
public ClassB getClassB () {
retornar classB;
}
public void setClassb (classe ClassB) {
this.classb = ClassB;
}
}
Classa
A cópia do código é a seguinte:
pacote cn.lzrabbit;
classe pública Classb {
privado int classebid;
String private Classbname;
public int getClassbid () {
retornar classBid;
}
public void Setclassbid (int Classbid) {
this.classbid = Classbid;
}
public String getClassBName () {
retornar classbname;
}
public void setClassbname (string classBname) {
this.classbname = classbname;
}
}
Classb
Xmlutil para serialização
A cópia do código é a seguinte:
pacote cn.lzrabbit;
importar java.io.stringReader;
importar java.io.stringwriter;
importar javax.xml.bind.*;
classe pública xmlutil {
public static string toxml (objeto obj) {
tentar {
JaxbContext context = JaxbContext.NewInstance (obj.getclass ());
Marshaller marshaller = context.createmarshaller ();
marshaller.setProperty (marshaller.jaxb_encoding, "utf-8"); // // formato de codificação
marshaller.setProperty (marshaller.jaxb_formatted_output, true); // se deve formatar a string xml gerada
marshaller.setProperty (marshaller.jaxb_fragment, false); // se deve omitir as informações da declaração do cabeçalho XM
Stringwriter writer = new stringWriter ();
Marshaller.Marshal (OBJ, escritor);
return writer.toString ();
} catch (Exceção e) {
lançar nova execução de tempo de execução (e);
}
}
@Suppresswarnings ("sem controle")
public static <t> t fromxml (string xml, classe <t> valuetype) {
tentar {
JAXBCONTEXT CONTEXT = JAXBCONTEXT.NewInstance (valuetype);
Unarshaller unarshaller = context.createunmarshaller ();
return (t) unarshaller.unmarshal (new StringReader (xml));
} catch (Exceção e) {
lançar a nova RuntimeTeException (E.GetMessage ());
}
}
}
Xmlutil
A chamada é a seguinte:
A cópia do código é a seguinte:
pacote cn.lzrabbit;
classe pública 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");
classe.setClassB (ClassB);
System.out.println (xmlutil.toxml (Classa));
}
}
Mainrun
O resultado da saída é o seguinte:
A cópia do código é a seguinte:
<? xml versão = "1.0" coding = "utf-8" standalone = "sim"?>
<SLASA>
<ClassAid> 11 </s ClassAid>
<Sclassaname> a1 </s Classaname>
<SCLASSB>
<Classbid> 22 </Classbid>
<sClassbname> b2 </s Classbname>
</classb>
</slassa>
Aqui estão alguns pontos a serem observados
1. Adicione a anotação @xmlrootElement à classe serializada, caso contrário, um erro será relatado (o prompt de erro é muito claro, para que não o postarei aqui)
O 2JaxB serializa getters e setters por padrão ao serializar XML, e os getters e setters devem aparecer em pares antes de serem serializados.
3 Nomes de atributo. O que você precisa prestar atenção aqui é @xmlelement pode ser colocado no getter ou no setter, mas apenas um pode ser colocado, o que significa que a anotação @xmlelement não pode ser usada no getter e no Setter ao mesmo tempo
4Como controlar o nome do nó raiz?
Use @xmlrootElement para especificar o atributo de nome, como @xmlrootElement (name = "Classa")
5 Como adicionar um espaço para nome para especificar o atributo namespace usando @xmlrootElement (namespace = "cn.lzrabbit")
6 Como controlar com precisão cada nome de atributo
A conversão automática automaticamente do JAXB para a primeira letra de minúscula fará com que os nomes de atributos imprevisíveis apareçam.
7 Como implementar a serialização usando campos de campo em vez de setters e getters
Adicione a anotação @xmlaccessortype (xmlaccesstype.field) na classe que você deseja usá -la e especificar como xmlaccesstype.field. .
A seguir, é apresentado um exemplo de código usando a anotação acima
A cópia do código é a seguinte:
@XmlrootElement (namespace = "cn.lzrabbit")
@Xmlaccessortype (xmlaccessType.field)
classe pública Classa {
private Int ClassAid;
@Xmlelement (name = "Classaname")
String private Classaname;
Classb privado ClassB;
public int getClassaid () {
retornar classAid;
}
public void setClassaid (int ClassAid) {
this.ClaSsaid = ClassAid;
}
public String getClassaname () {
retornar classaname;
}
public void setClassaname (string classaname) {
this.classaname = classaname;
}
public ClassB getClassB () {
retornar classB;
}
public void setClassb (classe ClassB) {
this.classb = ClassB;
}
}
@XmlrootElement
@Xmlaccessortype (xmlaccessType.field)
classe pública Classb {
privado int classebid;
String private Classbname;
public int getClassbid () {
retornar classBid;
}
public void Setclassbid (int Classbid) {
this.classbid = Classbid;
}
public String getClassBName () {
retornar classbname;
}
public void setClassbname (string classBname) {
this.classbname = classbname;
}
}
A saída XML é
A cópia do código é a seguinte:
<? xml versão = "1.0" coding = "utf-8" standalone = "sim"?>
<NS2: Classa XMLNS: NS2 = "CN.lzrabbit">
<ClassAid> 11 </s ClassAid>
<Sclassaname> a1 </s Classaname>
<SCLASSB>
<Classbid> 22 </Classbid>
<sClassbname> b2 </s Classbname>
</classb>
</ns2: Classa>
PS: Aqui estão algumas ferramentas on -line para sua referência:
Ferramenta de conversão mútua xml/json online:
http://tools.vevb.com/code/xmljson
Formato xml online/compacte xml online:
http://tools.vevb.com/code/xmlformat
Ferramentas de compactação/formatação online XML:
http://tools.vevb.com/code/xml_format_compress