11

我试图找出将 xml 文件映射到普通的旧 java 对象的最简单方法。

注意:在我的示例中,xml 与我预期的 POJO 不太匹配。

///////// THE XML
<?xml version="1.0" encoding="UTF-8"?>
<Animal>
  <standardName>
    <Name>Cat</Name>
  </standardName>
  <standardVersion>
    <VersionIdentifier>V02.00</VersionIdentifier>
  </standardVersion>
</Animal>


////// THE INTENDED POJO
class Animal
{
 private String name;
 private String versionIdentifier;
}

常规 JAXB(带注释)将不起作用,因为 JAXM 元素名称注释不允许我指定嵌套元素。(即标准名称/名称)。

我看过 Jibx,但它似乎过于复杂,并且没有提供我想做的完整示例。

卡斯特罗似乎可以做我想做的事(使用映射文件),但我想知道是否还有其他可能的解决方案。(可能这将允许我跳过映射文件,只允许我在注释中指定所有内容)。

谢谢

4

4 回答 4

5

EclipseLink JAXB (MOXy)允许您执行您正在寻找的基于路径的映射:

@XmlRootElement 
class Animal 
{ 
 @XmlPath("standardName/Name/text()")
 private String name; 

 @XmlPath("standardVersion/VersionIdentifier/text()");
 private String versionIdentifier; 
} 

有关更多信息,请参阅:

EclipseLink 还允许使用外部配置文件指定元数据:

于 2010-07-07T16:27:51.553 回答
3

这篇文章可能对你有所帮助......它只需要你知道xpath http://onjava.com/onjava/2007/09/07/schema-less-java-xml-data-binding-with-vtd-xml.html

于 2009-10-30T19:53:22.543 回答
3

Jakarta Commons Digester应该做你想做的事。

或者,我建议编写一个使用 XPath 从 XML 检索元素的转换类。

于 2009-10-30T19:54:20.900 回答
2

我认为 JiBX 是最好的(JAXB、Castor、XMLBeans 等),特别是因为我更喜欢映射文件而不是注释。诚然,它有一个不错的学习曲线,但该网站有很多很好的例子。你一定错过了教程

如果您只采用一种方式(XML --> POJO),您可以使用Digester

旁注:我更喜欢映射文件而不是注释,因为注释:

  • 使代码混乱(尤其是在使用多个产品的注释时)
  • 混合关注点(领域层中的 XML、数据库等)
  • 只能绑定到单个 XML(或数据库,或 Web 服务等)表示
于 2009-10-30T19:52:44.243 回答