2013-04-23 100 views
0

我的应用程序的目标是创建XML的配置文件,这是符合特定的XSD文件。 我的计划如下: 1.我从xsd文件中创建一个ecore模型 2.从这个ecore模型生成java类(通过genmodel) 3.当前配置中需要的类实例我填写的值 4.现在我创建了一个XML文件。如何使用EMF创建符合XSD的XML实例?

从conf.xsd在步骤2中填充有其中创建的Java类三种不同的文件夹:CONF,Conf.impl和Conf.util。通过ConfFactoryImpl.init()我创建了ConfFactory。现在,根据以下文章(How to convert an XMI model-instance of Ecore to XML of the given XSD?),我可以使用XMLResource创建一个XML文件,如果我正确理解这一点的话。但我仍然在为这件事而挣扎。我的JAVA很生疏(在过去的几年中没有使用它),所以我会对任何提示有所帮助。

回答

0

这可能是有益的。这是从现有的.XSD Java创建XML文件的例子

的XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
jxb:version="2.0"> 

<xsd:element name="Greetings" type="GreetingListType"/> 
<xsd:complexType name="GreetingListType"> 
    <xsd:sequence> 
    <xsd:element name="Greeting" type="GreetingType" 
     maxOccurs="unbounded"/> 
    </xsd:sequence> 
</xsd:complexType> 
<xsd:complexType name="GreetingType"> 
    <xsd:sequence> 
    <xsd:element name="Text" type="xsd:string"/> 
    </xsd:sequence> 
    <xsd:attribute name="language" type="xsd:language"/> 
</xsd:complexType> 

</xsd:schema> 

Java类:

import java.util.*; 
import javax.xml.bind.*; 
import hello.*; 

public class Hello { 

private ObjectFactory of; 
private GreetingListType grList; 

public Hello(){ 
of = new ObjectFactory(); 
grList = of.createGreetingListType(); 
} 

public void make(String t, String l){ 
    GreetingType g = of.createGreetingType(); 
    g.setText(t); 
    g.setLanguage(l); 
    grList.getGreeting().add(g); 
} 

public void marshal() { 
    try { 
     JAXBElement<GreetingListType> gl = 
     of.createGreetings(grList); 
     JAXBContext jc = JAXBContext.newInstance("hello"); 
     Marshaller m = jc.createMarshaller(); 
     m.marshal(gl, System.out); 
     } catch(JAXBException jbe){ 
    // ... 
    } 
} 

} 

例子:

Hello h = new Hello(); 
h.make("Bonjour, madame", "fr"); 
h.make("Hey, you", "en"); 
h.marshal(); 

输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Greetings> 
<Greeting language="fr"> 
<Text>Bonjour, madame</Text> 
</Greeting> 
<Greeting language="en"> 
<Text>Hey, you</Text> 
+0

非常感谢您的快速响应。它已经帮了我一些,但我仍然有点困难。为什么对象“of”是ObjectFactory类型的,而不是类型HelloFactory,我可以在我生成的类中找到它。所以我创建了:HelloFactory = new HelloFactoryImpl();但如果我这样做,我错过了createGreetings方法。我只有createGreetingsType(void) – user2311649 2013-04-24 14:20:55