在xml

时间:2017-10-25 13:55:18

标签: java xml

我正在学习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>

1 个答案:

答案 0 :(得分:0)

我不确定是否有&#34; 正常&#34;这样做的方法。我建议您在开头定义所有作者,并在book结构中使用对ID的引用,而不区分重复与否。但是这个答案与我所看到的结构严格相关,细节取决于用例,以及您将使用所生成的XML做些什么。

作为最终评论,这个问题与Java无关,因为它与语言本身是一般的而且没有关系。