JAVAbeanとXMLを変換するための強力なツール - XStreamの詳細なコード説明

黄舟
リリース: 2017-03-31 14:01:49
オリジナル
1587 人が閲覧しました

XStream は、有名な思想に基づいたオープンソース プロジェクトです。その主な機能は、Java Bean と XML テキスト間の変換を提供することです。これは、これには含まれません。議論の範囲内の記事。 XSteamはJAVA1.5以降のアノテーションもサポートしています。 この時点では、JAVA BEAN にいくつかのアノテーションを追加するだけで済みます。もちろん、JAVA Bean の変更が許可されていない場合、XStream には非常に簡単な register メソッドも用意されています。いくつかの側面から詳しく説明します。 2. エイリアスの使用 4. 属性は変換に関与しません。 1. 基本的な変換 これは通常の JAVA Bean です:

package xstreamTest;  
public class Person {  
    private String name;  
    private int age;  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
ログイン後にコピー

変換コードは次のとおりです:
XStream xstream = new XStream();  
Person person = new Person();  
person.setName("pli");  
person.setAge(18);  
System.out.println(xstream.toXML(person));
ログイン後にコピー

この結果が得られます:
<xstreamTest.Person>  
  <name>pli</name>  
  <age>18</age>  
</xstreamTest.Person>
ログイン後にコピー
しかし、ルート タグがパッケージ パスを使用したくない場合があります。その方法エイリアスを使用します
2. エイリアス Jia Ding 不可解な要素タグ「xstreamTest.person」を「person」に変更する必要があります。
package xstreamTest;  
@XStreamAlias("person")  
public class Person {  
    private String name;  
    private int age;  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
ログイン後にコピー

実行されるコードは次のようになります:
XStream xstream = new XStream();  
xstream.autodetectAnnotations(true);  
Person person = new Person();  
person.setName("pli");  
person.setAge(18);  
System.out.println(xstream.toXML(person));
ログイン後にコピー

これで、必要なものが得られます:
<person>  
  <name>pli</name>  
  <age>18</age>  
</person>
ログイン後にコピー

3. 属性の処理

Java Bean の「age」属性を XML の person タグとして使用したい場合属性をやるべきですか?

別のアノテーション: @XStreamAsAttribute です。JAVA Bean は次のようになります:

@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
      
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
ログイン後にコピー

結果は次のようになります:

<person age="18">  
  <name>pli</name>  
</person>
ログイン後にコピー

4. JAVA Bean にリストがある場合はどうなりますか。

@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
      
    List<String> girlFriends;  
      
    public List<String> getGirlFriends() {  
        return girlFriends;  
    }  
  
    public void setGirlFriends(List<String> girlFriends) {  
        this.girlFriends = girlFriends;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
ログイン後にコピー

直接変換すると、次の結果が得られます:

<person age="18">  
  <name>pli</name>  
  <girlFriends>  
    <string>YuanYuanGao</string>  
    <string>QiShu</string>  
    <string>BoZhiZhang</string>  
  </girlFriends>  
</person>
ログイン後にコピー

XStream は、リストのルート ノードを削除し、リストの名前を変更したいユーザーのニーズを満たすために、ここで @XStreamImplicit(itemFieldName=***) アノテーションを提供します。同様に、この例では、 タグを削除し、「」を変更するだけです。

@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
    @XStreamImplicit(itemFieldName="girl")  
    List<String> girlFriends;  
      
    public List<String> getGirlFriends() {  
        return girlFriends;  
    }  
  
    public void setGirlFriends(List<String> girlFriends) {  
        this.girlFriends = girlFriends;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
ログイン後にコピー

結果は次のようになります:

<person age="18">  
  <name>pli</name>  
  <girl>YuanYuanGao</girl>  
  <girl>QiShu</girl>  
  <girl>BoZhiZhang</girl>  
</person>
ログイン後にコピー

5. 属性を無視します
JAVA Bean にシリアル化したくない属性がある場合、XStream はこの要件を解決するためのアノテーションを提供します: @XStreamOmitField
たとえば、ガールフレンドのリストをシリアル化したくない

@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
    @XStreamImplicit(itemFieldName="girl")  
    @XStreamOmitField  
    List<String> girlFriends;  
      
    public List<String> getGirlFriends() {  
        return girlFriends;  
    }  
  
    public void setGirlFriends(List<String> girlFriends) {  
        this.girlFriends = girlFriends;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}
ログイン後にコピー

以上がJAVAbeanとXMLを変換するための強力なツール - XStreamの詳細なコード説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!