我正在学习java和XML交互,并试图找出存储可能包含对同一对象的引用的层次结构的一般方法。例如,我有一个包含两个列表的数据集 - 作者和书籍。 Book中的一个字段是作者列表,其中可以包含一些作者列表中存在的一些作者和一些不存在的作者。因此层次结构可能引用其中的重复对象,如下所示:
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);
现在我希望能够从保存关系的xml文件中读取这种层次结构(在本例中为Dataset对象)。将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 :(得分:0)
我不确定是否有&#34; 正常&#34;这样做的方法。我建议您在开头定义所有作者,并在book
结构中使用对ID的引用,而不区分重复与否。但是这个答案与我所看到的结构严格相关,细节取决于用例,以及您将使用所生成的XML做些什么。
作为最终评论,这个问题与Java无关,因为它与语言本身是一般的而且没有关系。