0

2 つのリストの要素間で参照を作成する必要があります。XStream を使用してみました。XML の例を次に示します。

<bookshop>
    <authors>
        <author id="a1">
            <name>Stanisław</name>
        </author>
    </authors>
    <books>
        <book id="b1">
            <author>a1</author>
            <title>Ubik</title>
            <price currency="PLN">29.0</price>
        </book>
    </books>
</bookshop>

私のJavaクラスのいくつかの傷:

public class Bookshop {
    private ArrayList<Author> authors;
    private ArrayList<Book> boooks;
}

public class Book {
    @XStreamAsAttribute
    private String id;
    private Author author;
    private String title;
    private Price price;
}

@XStreamConverter(value=ToAttributedValueConverter.class, strings={"value"})
public class Price {
    private double value;
    @XStreamAsAttribute
    private String currency;
}

public class Author {
    @XStreamAsAttribute
    private String id;
    private String name;
    private String surname;
}

そして、XMLをクラスに入れようとするたびに、Author autorフィールドにnullが表示されます。もう少し注釈が必要かもしれませんが、Xstream ドキュメントには何も見つかりませんでした。

4

1 に答える 1

0

あなたXMLは間違っています。XStreamのインスタンスをシリアライズしようとすると、次のようになりますBookshop

<bookshop>
  <authors>
    <author>
      <id>a1</id>
      <name>Yuri</name>
      <surname>Stanislaw</surname>
    </author>
    <author>
      <id>a2</id>
      <name>Bill</name>
      <surname>Gates</surname>
    </author>
  </authors>
  <books>
    <book>
      <id>b1</id>
      <author reference="/bookshop/authors/author[2]"/>
      <title>Programming basics</title>
      <price>
        <currency>USD</currency>
        <value>100.0</value>
      </price>
    </book>
  </books>
</bookshop>

上記XMLは、次の設定でシリアル化されます。

xstream.setMode(XStream.XPATH_ABSOLUTE_REFERENCES);
xstream.alias("bookshop", Bookshop.class);
xstream.alias("author", Author.class);
xstream.alias("book", Book.class);

テストに使用した完全なソース コードは、ここにあります。

これが参照問題の十分な解決策でない場合は、ConverterXStream で使用する独自の解決策を作成することをお勧めします。短いチュートリアルはここにあります。

于 2013-01-09T22:36:14.320 に答える