まず、次のサンプルデモンストレーションのために2つのサンプルクラスクラスとclassBを定義します
コードコピーは次のとおりです。
パッケージcn.lzrabbit;
パブリッククラスクラス{
Private int classaid;
プライベート文字列classaname;
Private ClassB ClassB;
public int getClassaid(){
ClassAidを返します。
}
public void setclassaid(int classaid){
this.classaid = classaid;
}
public string getClassaname(){
classNameを返します。
}
public void setclassaname(string classaname){
this.classaname = classaname;
}
public classb getClassB(){
ClassBを返します。
}
public void setclassb(classb classb){
this.classb = classb;
}
}
クラス
コードコピーは次のとおりです。
パッケージcn.lzrabbit;
Public Class ClassB {
Private int ClassBid;
プライベート文字列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;
}
}
classb
シリアル化のための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、Writer);
return writer.toString();
} catch(例外e){
新しいruntimeexception(e);
}
}
@suppresswarnings( "unchecked")
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(例外e){
新しいruntimeexception(e.getmessage());
}
}
}
xmlutil
通話は次のとおりです。
コードコピーは次のとおりです。
パッケージcn.lzrabbit;
パブリッククラスマインラン{
/**
* @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 = "yes"?>
<classa>
<ClassAid> 11 </classaid>
<classaname> a1 </classaname>
<ClassB>
<ClassBid> 22 </classBid>
<ClassBname> b2 </classbname>
</classb>
</classa>
ここに注意すべき点がいくつかあります
1. @xmlrootelementアノテーションをシリアル化クラスに追加すると、エラーが報告されます(エラープロンプトは非常に明確であるため、ここには投稿しません)
2JAXBシリアル化XML、およびゲッターとセッターがシリアル化される前にペアに表示する必要がある場合、デフォルトでゲッターとセッターをシリアル化します。
3つの属性名と属性名は、属性名を制御する必要がある場合は、@xmlement(name = "classaid")を使用する必要があります。ここに注意する必要があるのは、@xmlelementをゲッターまたはセッターに配置できることですが、1つだけを配置できます。つまり、@xmlelementアノテーションはゲッターとセッターで同時に使用できないことを意味します。
4ルートノード名を制御する方法は?
@xmlrootelement(name = "classa")などの名前属性を指定するには、@xmlrootelementを使用してください
5 @xmlrootelement(namespace = "cn.lzrabbit")を使用して名前空間属性を指定する名前空間を追加する方法
6各属性名を正確に制御する方法
JaxBを自動的に最初の文字に変換すると、予測不可能な属性が表示されない場合は、各属性の@xmlement(name = "")を設定します
7セッターとゲッターの代わりにフィールドフィールドを使用してシリアル化を実装する方法
@xmlacsortype(xmlaccesstype.field)アノテーションを使用し、XMLACCESSTYPE.FIELDとして指定することを強くお勧めします。 。
以下は、上記の注釈を使用したコード例です。
コードコピーは次のとおりです。
@xmlrootelement(namespace = "cn.lzrabbit")
@xmlacsortype(xmlaccesstype.field)
パブリッククラスクラス{
Private int classaid;
@xmlelement(name = "classaname")
プライベート文字列classaname;
Private ClassB ClassB;
public int getClassaid(){
ClassAidを返します。
}
public void setclassaid(int classaid){
this.classaid = classaid;
}
public string getClassaname(){
classNameを返します。
}
public void setclassaname(string classaname){
this.classaname = classaname;
}
public classb getClassB(){
ClassBを返します。
}
public void setclassb(classb classb){
this.classb = classb;
}
}
@xmlrootelement
@xmlacsortype(xmlaccesstype.field)
Public Class ClassB {
Private int ClassBid;
プライベート文字列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 = "yes"?>
<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