如何使用EMF读取XML文件?


问题内容

EMF = Eclipse建模框架

我必须在一个课堂项目中使用EMF。我正在尝试了解如何使用EMF执行以下操作:

  1. 读取XML,
  2. 将值放入对象。
  3. 使用ORM将对象中的值持久保存到数据库中。-完成
  4. 使用ORM从数据库获取数据并生成XML。

我需要使用EMF(不知道是什么)和JPA(完成)来完成所有这些操作。

我使用过JAXB,我知道,可以使用JAXB完成,但是(EMF == JAXB)怎么样?

我使用EMF创建了许多Java类,但是它们太多了!我在哪里实现读/写方法,以及如何运行EMF项目?

谢谢

UPDATE1 提示
http://www.eclipsezone.com/eclipse/forums/t58829.html

更新2

我有架构,并且已经使用.xsd生成了模型代码。现在,我在从XML文件读取数据时遇到问题。


问题答案:

EMF使用XMIResourceImpl(默认,最流行的方式)序列化数据模型,该模型 严格使用XMI格式,而不是自定义XML结构

有关EMF及其使用案例的文章,请参见http://eclipsedriven.blogspot.com/

我同意其他答复者的观点,EMF可能不是您想要的。

如果我真的想使用带有自定义XML结构的EMF(即非XMI),则可能会使用JAXB来编组/解组我的EMF对象(EObjects)。

因此,EMF与JAXB不同,它们具有不同的目的和目标。实际上,您可能可以以某种方式组合EMF和JAXB。我从未尝试过,但似乎存在有效的用例。(如上所述,用于将EMF对象编组到XML或从XML编组)

要了解EMF,您需要切换范例。首先,删除“ XML”部分,让它从您的脑海中消失。然后,我建议您执行以下操作:

  1. 创建一个空的EMF项目。
  2. 创建一个简单的Ecore文件(.ecore),或从Internet上获取它。或从任何XML Schema / UML文件导入Ecore模型。
  3. 右键单击EClass,然后单击“创建动态实例”,这将创建一个.xmi文件。
  4. 使用Eclipse打开.xmi文件,这将打开该模型的EMF编辑器。根据需要进行编辑。
  5. 检查(编辑的).xmi文件的内容。您会看到该格式完全符合Ecore模型。您将无法从模型<-> XMI文件更改/自定义映射,因为顾名思义,XMIResourceImpl仅读取/保存XMI文件(恰好在XML之上实现),但不读取/保存任意XML格式。

EMF支持读取/写入 XML Schema元模型
(即XSD文件),以便将其转换为Ecore元模型,但不支持符合该模式的XML文件(甚至不符合Ecore),除非这些文件为XMI格式。

要将EMF模型持久存储到关系数据库中,请参阅:http :
//eclipsedriven.blogspot.com/2010/12/persisting-emf-objects-to-rdbms-
with.html

我正在使用Teneo。(以及CDO)

关于“ XML”,如果您坚持使用XMI并对此感到满意,那么EMF将使您的生活 更加 轻松,因为您无需进行 任何
映射(与JAXB不同)。缺点是我们的对象必须是EMF对象。

EMF对象是由EMF生成并实现EObject并直接或间接扩展EObjectImpl的对象。通常,您不想手动编写EMF对象,这很麻烦。另一方面,JAXB“对象”通常是纯域对象POJO,并且没有JAXB的其他要求。请注意,与JAXB不同,
EMF对象不是POJO。 这解释了EMF和JAXB之间的另一个不同目标。它们的重叠小于您的想象。

从XMI(不是XML)读取非常容易:

XMIResource resource = new XMIResourceImpl(URI.create("file:/path/to/mymodel.xmi"));
resource.load(null);
System.out.println( resource.eContents().get(0) );