当前位置 : 主页 > 网页制作 > xml >

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

来源:互联网 收集:自由互联 发布时间:2021-06-13
给出 XML示例: fooRoot bar lolLOLOLOLOL/lol /bar noob boon thisIsIt/thisIsIt /boon /noob/fooRoot 哪个应该映射到: class MyFoo { String lol; String thisIsIt; Object somethingUnrelated;} 约束: 不应转换XML,它是作为解析
给出 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中.

注意:我是 EclipseLink JAXB (MOXy)领导者,也是 JAXB 2 (JSR-222)专家组的成员.

你可以用MOXy做到这一点:

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

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

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

  @XmlTransient
  Object somethingUnrelated;
}

欲获得更多信息

> http://blog.bdoughan.com/2010/07/xpath-based-mapping.html
> http://blog.bdoughan.com/2010/09/xpath-based-mapping-geocode-example.html
> http://blog.bdoughan.com/2011/03/map-to-element-based-on-attribute-value.html
> http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html

网友评论