加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:42:36 所属栏目:百科 来源:网络整理
导读:给出 XML示例: fooRoot bar lolLOLOLOLOL/lol /bar noob boon thisIsIt/thisIsIt /boon /noob/fooRoot 哪个应该映射到: class MyFoo { String lol; String thisIsIt; Object somethingUnrelated;} 约束: 不应转换XML,它是作为解析的org.w3c.dom.Document
给出 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读