如何使用java代码生成xsd文件?

时间:2012-07-26 10:26:10

标签: java xsd jaxb

<complexType name="spThread">
        <sequence>
            <element name="SPThreadID" type="int" />
            <element name="durtime" minOccurs="0" default="0">
                <simpleType>
                    <restriction base="int">
                        <minInclusive value="0" />
                    </restriction>
                </simpleType>
            </element>
            <element name="minexecutions" minOccurs="0" default="0">
                <simpleType>
                    <restriction base="int">
                        <minInclusive value="0" />
                    </restriction>
                </simpleType>
            </element>
            <element name="numThreads" type="int" />
            <element name="procedures" type="spm:procedure" minOccurs="1"
                maxOccurs="unbounded" />
        </sequence>
    </complexType>

我想用java代码生成这种类型的.xsd文件..?我怎么能这样做??

特别是如何生成简单类型元素并对其进行限制?

4 个答案:

答案 0 :(得分:1)

我建议您使用JAXB来执行任何XML任务。但通常手动生成XSD文件,然后使用XSD文件以编程方式生成XML文件。你想要开发什么?

答案 1 :(得分:1)

您可以利用现有的0类型,而不是创建自己的简单类型来表示以xs:nonNegativeInteger开头的整数。我将举例说明。

<强> SpThread

您可以使用@XmlSchemaType注释指定应在字段/属性的XML架构中生成的类型。

package forum11667335;

import javax.xml.bind.annotation.XmlSchemaType;

public class SpThread {

    private int durTime;

    @XmlSchemaType(name="nonNegativeInteger")
    public int getDurTime() {
        return durTime;
    }

    public void setDurTime(int durTime) {
        this.durTime = durTime;
    }

}

<强>演示

您可以使用generateSchema上的JAXBContext方法生成XML架构:

package forum11667335;

import java.io.IOException;
import javax.xml.bind.*;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(SpThread.class);

        jc.generateSchema(new SchemaOutputResolver() {

            @Override
            public Result createOutput(String namespaceUri, String suggestedFileName) throws IOException {
                StreamResult result = new StreamResult(System.out);
                result.setSystemId(suggestedFileName);
                return result;
            }

        });
    }

}

<强>输出

以下是生成的XML架构。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="spThread">
    <xs:sequence>
      <xs:element name="durTime" type="xs:nonNegativeInteger"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

答案 2 :(得分:0)

您可以使用任何XML处理API来实现此目的。 JDOM就是其中之一。如果您想要一个特定于构建XML Schema的API,然后将其序列化为XML,那么您可能需要查看Eclipse MDT API。

答案 3 :(得分:0)

您可以使用Java2Schema工具从java类生成模式,也可以尝试使用JaxB 2.0