xstreamにおけるいくつかの注釈の意味と使い方
XStreamはjavaオブジェクトとxmlを互いに変換できる強力なツールです.xstreamはjavaクラスのメンバー変数がプライベートかパブリックかを気にせず、デフォルトのコンストラクション関数があるかどうかも気にしません.xmlオブジェクトからjavaオブジェクトに変換しfromXML()メソッドを使用する呼び出しも簡単です.Javaオブジェクトからxml、toXML()にシーケンス化すれば便利です.xstreamも注釈方式をサポートしており、これらは出力を簡略化するために設計されています.以下、これらの注釈の意味と使い方を簡単に説明します.
1.注釈がない場合
Ballは次のように定義されています.
注記はありません.出力は次のとおりです.
Catを手に入れるxmlは以下の通り
1.@XStreamAlias("cat")はxstreamに等しい.alias("cat", Cat.class);
どのクラスの注釈がアクティブになる必要があるかを明確にする必要があります.
2.XStreamAsAttributeの役割は、クラス内のメンバーを親ノードの属性として出力、xstreamと同等である.useAttributeFor(Cat.class, "name")
3.@XStreamAliasの役割は、属性を別名で出力することであり、xstreamと同等である.aliasField("catAge", Cat.class, "age");
4.集合でよく使用される注記@XStreamImplicitに対して 表示を削除し、間の ノード要素のみを表示
出力は次のようになります.
4.@XStreamOmitFieldは、この属性がxmlにシーケンス化されないことを示しているなど、いくつかの注釈が理解しやすい.
よく使うのはこれだけで、ほかのことはまた討論して勉強しましょう.
1.注釈がない場合
public class Cat {
//
private String name;
//
private Integer age;
//
private List<Ball> balls;
Cat(String name,Integer age,List<Ball> balls){
this.name = name;
this.age = age;
this.balls=balls;
}
//getter/setter
Ballは次のように定義されています.
public class Ball {
//
private String color;
Ball(String color){
this.color = color;
}
注記はありません.出力は次のとおりです.
public static void main(String[] args) throws Exception{
// cat
List<Ball> balls = new ArrayList<Ball>();
balls.add(new Ball("red"));
Cat cat = new Cat(" ",1,balls);
//
// D cat.xml
FileOutputStream fout = new FileOutputStream("D:/cat.xml");
XStream xs = new XStream();
xs.toXML(cat,fout);
}
Catを手に入れるxmlは以下の通り
<com.timejob.node.Cat>
<name> </name>
<age>1</age>
<balls>
<com.timejob.node.Ball>
<color>red</color>
</com.timejob.node.Ball>
</balls>
</com.timejob.node.Cat>
1.@XStreamAlias("cat")はxstreamに等しい.alias("cat", Cat.class);
@XStreamAlias("cat") //here
public class Cat {
//
private String name;
//
private Integer age;
//
private List<Ball> balls;
どのクラスの注釈がアクティブになる必要があるかを明確にする必要があります.
public static void main(String[] args) throws Exception{
// cat
List<Ball> balls = new ArrayList<Ball>();
balls.add(new Ball("red"));
Cat cat = new Cat(" ",1,balls);
//
// D cat.xml
FileOutputStream fout = new FileOutputStream("D:/cat.xml");
XStream xs = new XStream();
//xs.alias("cat", Cat.class); // @XStreamAlias("cat")
xs.processAnnotations(Cat.class);// Cat.class
xs.toXML(cat,fout);
}
Catクラス名でこの注釈を使用すると、クラスがxmlにシーケンス化されていることを示すクラス名com.timejob.node.Catはcat出力に置き換えられ、xmlがより明確で短くなります.<cat>
<name> </name>
<age>1</age>
<balls>
<com.timejob.node.Ball>
<color>red</color>
</com.timejob.node.Ball>
</balls>
</cat>
2.XStreamAsAttributeの役割は、クラス内のメンバーを親ノードの属性として出力、xstreamと同等である.useAttributeFor(Cat.class, "name")
@XStreamAlias("cat")
public class Cat {
//
@XStreamAsAttribute // here name Cat
private String name;
//
private Integer age;
//
private List<Ball> balls;
その他のコードはそのまま、出力後cat.xmlは次のとおりです.<cat name=" ">
<age>1</age>
<balls>
<com.timejob.node.Ball>
<color>red</color>
</com.timejob.node.Ball>
</balls>
</cat>
nameプロパティがcatのプロパティとしてルートノードに出力されているのを見ました3.@XStreamAliasの役割は、属性を別名で出力することであり、xstreamと同等である.aliasField("catAge", Cat.class, "age");
@XStreamAlias("cat")
public class Cat {
//
@XStreamAsAttribute
private String name;
//
@XStreamAlias("catAge") //here
private Integer age;
//
private List<Ball> balls;
はcatを得る.xmlファイルは次のとおりです.<cat name=" ">
<catAge>1</catAge>
<balls>
<com.timejob.node.Ball>
<color>red</color>
</com.timejob.node.Ball>
</balls>
</cat>
4.集合でよく使用される注記@XStreamImplicitに対して
@XStreamAlias("cat")
public class Cat {
//
@XStreamAsAttribute
private String name;
//
@XStreamAlias("catAge")
private Integer age;
//
@XStreamImplicit //here
private List<Ball> balls;
出力は次のようになります.
<cat name=" ">
<catAge>1</catAge>
<com.timejob.node.Ball>
<color>red</color>
</com.timejob.node.Ball>
</cat>
これでより簡潔に見えます.4.@XStreamOmitFieldは、この属性がxmlにシーケンス化されないことを示しているなど、いくつかの注釈が理解しやすい.
@XStreamAlias("cat")
public class Cat {
//
@XStreamAsAttribute
private String name;
//
@XStreamAlias("catAge")
private Integer age;
//
@XStreamImplicit
private List<Ball> balls;
@XStreamOmitField //here
private String noCare;
よく使うのはこれだけで、ほかのことはまた討論して勉強しましょう.