我们的Java应用程序从许多外部系统接收XML消息,我们希望从中创建域对象. 我们没有这些文件的模式.
目前我们正在使用XPath从XML中提取字符串,然后在新域对象上调用setter.我们使用自制的XmlUtils类来执行此操作.
foo.setBar(XmlUtils.number("/bar", document));
Run Code Online (Sandbox Code Playgroud)
有哪些替代的基于Java的方法,它们不需要访问文档的模式?
注意: 我是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)
欲获得更多信息