ホームページ  >  記事  >  バックエンド開発  >  JAVAbeanとXMLを変換するための強力なツール - XStreamの詳細なコード説明

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

黄舟
黄舟オリジナル
2017-03-31 14:01:491540ブラウズ

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=***) アノテーションを提供します。同様に、この例では、4e4533e6d53566a86c3dd22301ca0fe8 タグを削除し、「98c455a79ddfebb79781bff588e7b37e」を変更するだけです。

@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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。