如何通过XPath将XML映射到Java对象?

时间:2011-09-27 13:43:03

标签: java xml java-ee xpath

给出XML示例:

<fooRoot>
  <bar>
    <lol>LOLOLOLOL</lol>
  </bar>
  <noob>
    <boon>
      <thisIsIt></thisIsIt>
    </boon>
  </noob>
</fooRoot>

应该映射到:

class MyFoo {
  String lol;
  String thisIsIt;
  Object somethingUnrelated;
}

约束:

  • 不应转换XML,它是作为解析的org.w3c.dom.Document对象提供的。
  • 类不会也不会将1:1映射到XML。
  • 我只想将XML的特定路径映射到对象的特定字段。

我的梦想解决方案如下:

@XmlMapped
class MyFoo {

  @XmlElement("/fooRoot/bar/lol")
  String lol;

  @XmlElement("/noob/boon/thisIsIt")
  String thisIsIt;

  @XmlIgnore
  Object somethingUnrelated;
}

同样存在吗?我发现要么需要严格的1:1映射(例如JMX,JAXB)或所有字段的手动迭代(例如SAX,Commons Digester。)

JiBX binding definitions离我最近的东西来了。但是,此工具可用于编组/解组Java对象的完整层次结构。我只想在运行时将XML文档的一部分提取到现有的Java bean中。

3 个答案:

答案 0 :(得分:5)

注意:我是 EclipseLink JAXB (MOXy) 负责人,也是 JAXB 2 (JSR-222) 专家组的成员。< / p>

您可以使用MOXy执行此操作:

@XmlRootElement(name="fooRoot")
class MyFoo {

  @XmlPath("bar/lol/text()")
  String lol;

  @XmlElement("noob/boon/thisIsIt/text()")
  String thisIsIt;

  @XmlTransient
  Object somethingUnrelated;
}

了解更多信息

答案 1 :(得分:1)

试试XStream。这非常容易。希望能帮助到你!我现在没时间找一个完整的例子:)

答案 2 :(得分:1)

一个选项可以是编写一个自定义注释,它将XPath表达式作为输入并进行绑定。