XPath for XML to Domain Object转换器的替代方案

Pau*_*zie 5 java xml

我们的Java应用程序从许多外部系统接收XML消息,我们希望从中创建域对象. 我们没有这些文件的模式.

目前我们正在使用XPath从XML中提取字符串,然后在新域对象上调用setter.我们使用自制的XmlUtils类来执行此操作.

foo.setBar(XmlUtils.number("/bar", document));
Run Code Online (Sandbox Code Playgroud)

有哪些替代的基于Java的方法,它们不需要访问文档的模式?

bdo*_*han 6

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

MOXy提供了@XmlPath扩展,使您可以执行基于XPath的映射:

基于路径的映射

匹配bar元素下的foo元素:

@XmlPath("foo/bar/text()")
public int getBar() {
    return bar;
}
Run Code Online (Sandbox Code Playgroud)

基于位置的映射

匹配第二个bar元素:

@XmlPath("bar[2]/text()")
public int getBar() {
    return bar;
}
Run Code Online (Sandbox Code Playgroud)

基于谓词的映射

bar将具有type属性的元素与值匹配foo:

@XmlPath("bar[@type='foo']/text()")
public int getBar() {
    return bar;
}
Run Code Online (Sandbox Code Playgroud)

综合

所有上述概念可以一起使用:

@XmlPath("foo[2]/bar[@type='foo']/text()")
public int getBar() {
    return bar;
}
Run Code Online (Sandbox Code Playgroud)

欲获得更多信息