给出 XML示例: fooRoot bar lolLOLOLOLOL/lol /bar noob boon thisIsIt/thisIsIt /boon /noob/fooRoot 哪个应该映射到: class MyFoo { String lol; String thisIsIt; Object somethingUnrelated;} 约束: 不应转换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