【问题标题】:Mapping complex result set with Dom4j使用 Dom4j 映射复杂的结果集
【发布时间】:2010-03-01 11:57:37
【问题描述】:

我正在尝试从复杂的结果集(即具有多个连接的结果集)创建 XML 文档,因此比赛有一堆问题,一个问题有一堆答案。

所以文档最终会看起来像:

<competitions>
  <competition id="12">
    <question id="3">
      <answer id="34">
        The answer
      </answer>
      <answer id="35">
        The answer
      </answer>
      <answer id="36">
        The answer
      </answer>
    </question>
...

很像 SQL Server 中的“for XML”命令,但是我不能使用数据库来做处理,所以它需要在 Java 中。任何人都可以为我指出正确的方向,指向任何好的资源,甚至是做这个/类似事情的开源库,这样我就可以让它做我想做的事情吗?谢谢。

【问题讨论】:

    标签: java sql sql-server xml dom4j


    【解决方案1】:

    我从您的问题中不明白“Java 中”是什么意思?您是否需要解析这个 XML(使用 Dom4J),是否要从中生成 Java 对象(使用 JAXB、Xstream 或任何其他 XML 绑定库),还是需要编写这个 XML?

    【讨论】:

    • "in Java" 表示我不能使用数据库,我必须使用 Java 进行处理。我需要从返回的结果集中创建 XML,我知道如何手动创建文档和元素等,但是在涉及嵌套元素时遇到了困难,就像我给出的 XML 示例一样。
    【解决方案2】:

    一个相当简单的事情是首先将您的结果集转换为 Competitions 对象,然后再将对象转换为 xml(使用 xstream 或一些此类框架)。

    您能否将结果集转换为竞赛对象? (或者您也需要这方面的帮助?)

    class Competitions {
       List<Competition> getCompetitions();
    }
    
    class Competition {
       Integer getId();
       Question getQuestion();
    }
    
    class Question {
       Integer getId();
       Answer getAnswer();
    }
    
    class Answer {
       String getText();
    }
    

    【讨论】:

      【解决方案3】:

      按照 Calm Storm 的建议,我将结果集转换为对象树,并在抽象类中创建了一个自定义 toXml 方法,该方法遍历每个对象中的方法并从中创建 XML 元素和属性。

      我简直不敢相信没有更简单的开源解决方案可以自动完成这一切!也许我只是懒惰:)

      【讨论】:

      • 您好,要从结果集中创建一个 java 对象,您可以使用 Hibernate(这是一种 ORM 解决方案)。 Hibernate 也有 XML 导出的选项。但是加入结果集有点棘手。
      猜你喜欢
      • 2010-09-18
      • 2012-05-30
      • 2019-02-13
      • 1970-01-01
      • 2018-08-17
      • 2014-02-03
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多