【问题标题】:Eclipse - XML Schema DefinitionEclipse - XML 模式定义
【发布时间】:2013-04-20 09:28:05
【问题描述】:

查看http://www.eclipse.org/modeling/mdt/?project=xsd#xsd。我们有文字:

“XML Schema Definition 是一个参考库,它提供了一个 API,用于检查、创建或修改 W3C XML Schema(独立或作为其他工件的一部分,例如 XForms 或 WSDL 文档)的任何代码。”

由此,我了解到我可以编写一个使用“XML Schema Definition”API 来创建 XML 文件的 java 类,并且这个创建的 XML 文件是我可以将其输入到 EMF 等工具中的文件.假设我的理解是正确的(如果不是,请告诉我怎么做),我该去哪里找到这样一个 java 类的“hello world”类型的例子?

【问题讨论】:

    标签: xml eclipse


    【解决方案1】:

    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>
    

    【讨论】:

    • 这很好 - 但我在 of.createGreetings 上有点挣扎 - 无法找到创建正确格式的方法:(
    • 这可能是因为 .XSD 本身的格式。你只是复制粘贴吗?您应该验证格式是否正确。请尝试 XML spy 或 XML 编辑器来验证是否正确。
    • 完美 - 但我似乎无法给你赏金 - 按钮去哪儿了?
    • 没问题,伙计;)。我想我回答你时它已经过期了。
    猜你喜欢
    • 2011-02-19
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2011-08-15
    • 2012-07-26
    • 2010-09-06
    相关资源
    最近更新 更多