2017-10-25 14 views
0

私はJavaとXMLのやりとりを学び、同じオブジェクトへの参照を含む可能性のある階層を格納する一般的なアプローチを見つけようとしています。たとえば、著者と書籍の2つのリストを持つデータセットがあります。 Bookのフィールドの1つは、著者のリストであり、一般的な著者のリストに存在するいくつかの著者と、そうでないものとで構成することができます。だから、階層は次のように、その中のオブジェクトを複製するための参照を持っていることがあります。xmlに重複オブジェクトを格納/ロードする

Author author1 = new Author("A"); 
Author author2 = new Author("B"); 

List<Author> authors = new ArrayList<>(); 
authors.add(author1); 
authors.add(author2); 

Author author3 = new Author("C"); 

List<Author> bookAuthors = new ArrayList<>(); 
bookAuthors.add(author2); 
bookAuthors.add(author3); 

Book book = new Book("book", bookAuthors); 

List<Book> books = new ArrayList<>(); 
books.add(book); 

... 

Dataset dataset = new Dataset(authors, books); 

今私は(DataSetオブジェクトにこのケースでは)階層のこの種を読み取ることができるようにしたい関係を保存してXMLファイルから。 idをXMLの作成者の属性として使用し、作成者の詳細を一度しか指定せずに、すでに読み込まれたIDと対応するオブジェクトのマップを使用して、アナライザーに復元関係を作成させるのは通常ですか?または、より適切な/共通のアプローチがありますか?ここで私が考えている例のXMLファイルの構造です:

<dataset> 

    <authors> 

    <author id="0"> 
     <author_data> 
     ... 
     </author_data> 
    </author> 

    <author id="1"> 
     <author_data> 
     ... 
     </author_data> 
    </author> 

    ...some other authors... 

    </authors> 

    <books> 

    <book> 
     ... 
     <authors> 

     <author id="1"/> //author that was specified before 

     <author id="2"> //author that was not - receives new id and is specified here 
      <author_data> 
      ... 
      </author_data> 
     </author> 

     ...some other authors... 

     </authors> 
    </book> 

    ...some other books... 

    </books> 

</dataset> 
+0

あなたは何をしようとしているかについて100%確信していませんが、アドバイスとして、dom4jのようなXMLフレームワークをXMLとJavaで簡単に使用することをお勧めします。さらに、オブジェクト間の関係を検索しようとしている場合、ルックアップを実行するためのデータベースや永続性が必要なように思えます。ヘルプを提供するために詳細を記入してください。 – MarcosTonina

+0

こんにちは、私はちょうど、関係を保存してレディxmlファイルから階層を読みたいと思っています。つまり、階層内の同じオブジェクトへの参照をいくつか持たなければならない場合は、xmlから重複を読みたくありません。私はポストに追加し、XML解析中にidとオブジェクトのマップを使用してそれを行う通常の方法か、より良い方法があるようなxml構造ですか? – gwaydeon

答えて

0

は、私はそれを行うには、「通常」方法があるかどうかわかりません。最初はすべての著者を定義し、book構造では、繰り返しの区別なしにIDへの参照を使用することをお勧めします。しかし、この答えは、私が見た構造に厳密に関連しており、詳細はユースケースによって異なります。また、生成するXMLでどのようなことを行うのかによって異なります。

最終的なコメントとして、この質問はJavaとは関係がありません。なぜなら一般的で言語自体には関係しないからです。

関連する問題