【问题标题】:How to generate xsd file using java code?如何使用java代码生成xsd文件?
【发布时间】:2012-07-26 10:26:09
【问题描述】:
<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 文件..?我该怎么做?

具体如何生成Simple类型的元素并对其进行限制?

【问题讨论】:

  • 架构的来源是什么?您是否正在编写用于创建模式的 GUI 工具?还是只是上述 XML 的某些部分是动态的?
  • 我确实有 Jaxb 注释的 java 类来生成模式

标签: java xsd jaxb


【解决方案1】:

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

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;
    }

}

演示

您可以在JAXBContext 上使用generateSchema 方法来生成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】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 嗨,Marko,我正在使用 jaxb 进行 xml 读写,那么是否有任何 aanotaton 或任何其他方式来生成上述类型的模式?
      • schemagen 工具似乎正是您想要的。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-25
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 2011-09-25
        相关资源
        最近更新 更多