2013-02-12 4 views
2

Глядя на http://www.eclipse.org/modeling/mdt/?project=xsd#xsd. У нас есть текст:Eclipse - XML ​​Schema Определение

«Определение схемы XML - это справочная библиотека, которая предоставляет API для использования с любым кодом, который исследует, создает или изменяет XML-схему W3C (автономно или как часть других артефактов, таких как XForms или WSDL документы) «.

Из этого я понимаю, что я могу написать класс java, который использует API определения схемы XML для создания XML-файла, и что этот созданный XML-файл является тем, который я могу затем использовать в таких инструментах, как EMF и т. Д. на. Предполагая, что мое понимание правильное (и если это не так, пожалуйста, скажите мне, как), где я могу найти пример типа «привет мир» такого класса Java?

ответ

3

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.createGreetings изо всех сил - не шов, чтобы найти способ, чтобы создать правильный формат :( – Joe

+0

Это может быть из-за формата. Сам XSD. Вы только что скопировали и ввели его? Вы должны проверить правильность формата. Попробуйте XML-шпион или XML-редактор, чтобы убедиться, что он есть. –

+0

Pefect - но я не могу показаться, чтобы дать вам щедрость - где кнопка ушла? – Joe