我们的 Java 应用程序从许多外部系统接收 XML 消息,我们希望从这些系统创建域对象。 我们没有这些文档的架构。
目前我们正在使用 XPath 从 XML 中提取字符串,然后在新域对象上调用 setter。我们使用自制的 XmlUtils 类来执行此操作。
foo.setBar(XmlUtils.number("/bar", document));
有哪些基于 Java 的替代方法不需要访问文档的架构?
最佳答案
注意:我是 EclipseLink JAXB (MOXy)领导,以及 JAXB 2.X ( JSR-222) 专家组的成员。
MOXy 提供了 @XmlPath
扩展,使您能够进行基于 XPath 的映射:
基于路径的映射
匹配foo
元素下的bar
元素:
@XmlPath("foo/bar/text()")
public int getBar() {
return bar;
}
基于位置的映射
匹配第二个 bar
元素:
@XmlPath("bar[2]/text()")
public int getBar() {
return bar;
}
基于谓词的映射
匹配具有 type
属性和值 foo
的 bar
元素:
@XmlPath("bar[@type='foo']/text()")
public int getBar() {
return bar;
}
合并
以上所有概念都可以一起使用:
@XmlPath("foo[2]/bar[@type='foo']/text()")
public int getBar() {
return bar;
}
了解更多信息
关于java - XML 到域对象转换器的 XPath 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6675430/