首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过XPaths将XML映射到Java对象?

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

Stack Overflow用户
提问于 2011-09-27 13:43:03
回答 3查看 2.5K关注 0票数 3

给出了XML示例:

代码语言:javascript
复制
<fooRoot>
  <bar>
    <lol>LOLOLOLOL</lol>
  </bar>
  <noob>
    <boon>
      <thisIsIt></thisIsIt>
    </boon>
  </noob>
</fooRoot>

应该映射到:

代码语言:javascript
复制
class MyFoo {
  String lol;
  String thisIsIt;
  Object somethingUnrelated;
}

制约因素:

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

我的梦想解决方案应该是:

代码语言:javascript
复制
@XmlMapped
class MyFoo {

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

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

  @XmlIgnore
  Object somethingUnrelated;
}

有类似的东西存在吗?我所发现的要么需要严格的1:1映射(例如JMX、JAXB),要么需要对所有字段(例如SAX、Commons )进行手动迭代。

JiBX绑定定义最接近我想要的东西。然而,该工具适用于马歇尔/unmarshall完成Java对象的层次结构。我只想在运行时将XML文档的部分提取到现有的Java中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-27 14:22:43

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

您可以使用MOXy来完成这一任务:

代码语言:javascript
复制
@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
票数 5
EN

Stack Overflow用户

发布于 2011-09-27 13:48:02

试试XStream。太简单了。希望能帮上忙!我现在没有时间做一个完整的例子:)

票数 1
EN

Stack Overflow用户

发布于 2011-09-27 14:10:46

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7570174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档