2013-04-23 1 views
0

내 응용 프로그램의 목표는 XSD 파일을 준수하는 XML 구성 파일을 만드는 것입니다. 내 계획은 다음과 같습니다 : 1. xsd 파일에서 ecore 모델을 만듭니다. 2.이 ecore 모델에서 (genmodel을 통해) Java 클래스를 생성합니다. 3. 현재 구성에 필요한 클래스 인스턴스 나는 값 으로 채 웁니다 4. 이제 어떻게 든 XML 파일을 만듭니다.EMF에서 XSD 준수 XML 인스턴스를 만드는 방법은 무엇입니까?

2 단계의 conf.xsd에서 세 개의 다른 폴더가 Conf 클래스, Conf.impl 및 Conf.util이라는 Java 클래스로 채워져 있습니다. ConfFactoryImpl.init()를 통해 ConfFactory를 만들었습니다. 그리고 지금, 다음 기사 (How to convert an XMI model-instance of Ecore to XML of the given XSD?)에 따르면, XMLResource를 어떻게하면 XML 파일을 creae로 사용할 수 있습니까? 이것을 정확히 이해하면됩니다. 그러나 나는 아직도 이것으로 고투하고있다. 내 자바 꽤 녹슨 (havent 지난 몇 년 동안 그것을 사용), 그래서 어떤 힌트에 도움이 될 것입니다.

답변

0

도움이 될 수 있습니다. 그것은 기존의 .XSD에서 자바에서 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> 

자바 클래스 :

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 of = new HelloFactoryImpl(); 하지만 이렇게하면 createGreetings 메서드가 누락됩니다. 나만 createGreetingsType (void)을 가지고있다. – user2311649