2
<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

4 回答 4

1

我建议您将 JAXB 用于您所做的任何 XML 工作。但通常 XSD 文件是手动生成的,然后 XML 文件是使用 XSD 文件以编程方式生成的。你想开发什么?

于 2012-07-26T10:47:00.643 回答
1

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

线程

您可以使用@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;
    }

}

演示

您可以使用generateSchemaon 方法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>
于 2012-07-26T14:00:34.023 回答
0

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

于 2012-07-26T10:30:36.493 回答
0

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

于 2012-07-26T10:35:07.533 回答