2013-04-23 30 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