使用Java从XSD架构生成xml

时间:2017-03-05 20:06:50

标签: java xml xsd

我需要基于XSD架构创建一种“骨架”xml。

这些模式定义的文档没有命名空间。它们由其他开发人员编写,而不是以自动方式编写。

不允许混合内容。也就是说,元素只能包含元素,或仅包含文本。

此示例xml的规则是:

  • 不应在示例xml
  • 中创建只能包含文本内容的元素
  • 示例xml
  • 中应包含所有其他可选和必需元素
  • 元素应该只创建一次,即使它们可以多次出现
  • 应该省略任何其他节点,例如属性,注释,处理指令等 - 样本xml将是'元素树'

Java中是否有API或工具可以生成这样的样本xml?我正在寻找从哪里开始的指针。

这需要以可靠的方式以编程方式完成,因为其他XSLT转换使用了示例xml。

2 个答案:

答案 0 :(得分:1)

Hope below code will serve your purpose

    package com.example.demo;
    import java.io.File;

    import javax.xml.namespace.QName;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.stream.StreamResult;

    import org.w3c.dom.Document;
    import org.w3c.dom.Element;

    import jlibs.xml.sax.XMLDocument;
    import jlibs.xml.xsd.XSInstance;
    import jlibs.xml.xsd.XSParser;

    public interface xsdtoxml {
         public static void main(String[] pArgs) {
                try {
                    String filename = "out.xsd";
                    // instance.

                    final Document doc = loadXsdDocument(filename);

                                //Find the docs root element and use it to find the targetNamespace
                    final Element rootElem = doc.getDocumentElement();
                    String targetNamespace = null;
                    if (rootElem != null && rootElem.getNodeName().equals("xs:schema")) 
                               {
                        targetNamespace = rootElem.getAttribute("targetNamespace");
                    }


                                //Parse the file into an XSModel object
                    org.apache.xerces.xs.XSModel xsModel = new XSParser().parse(filename);

                                //Define defaults for the XML generation
                    XSInstance instance = new XSInstance();
                    instance.minimumElementsGenerated = 1;
                    instance.maximumElementsGenerated = 1;
                    instance.generateDefaultAttributes = true;
                    instance.generateOptionalAttributes = true;
                    instance.maximumRecursionDepth = 0;
                    instance.generateAllChoices = true;
                    instance.showContentModel = true;
                    instance.generateOptionalElements = true;

                                //Build the sample xml doc
                                //Replace first param to XMLDoc with a file input stream to write to file
                    QName rootElement = new QName(targetNamespace, "out");
                    XMLDocument sampleXml = new XMLDocument(new StreamResult(System.out), true, 4, null);
                    instance.generate(xsModel, rootElement, sampleXml);
                } catch (TransformerConfigurationException e) 
                        {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            public static Document loadXsdDocument(String inputName) {
                final String filename = inputName;

                final DocumentBuilderFactory factory = DocumentBuilderFactory
                        .newInstance();
                factory.setValidating(false);
                factory.setIgnoringElementContentWhitespace(true);
                factory.setIgnoringComments(true);
                Document doc = null;

                try {
                    final DocumentBuilder builder = factory.newDocumentBuilder();
                    final File inputFile = new File(filename);
                    doc = builder.parse(inputFile);
                } catch (final Exception e) {
                    e.printStackTrace();
                    // throw new ContentLoadException(msg);
                }

                return doc;
            }

    }

答案 1 :(得分:-1)

xsd到xml:

1:您可以使用eclipse(右键单击并选择Generate)

2:Sun / Oracle多模式验证器

3:xmlgen

请参阅: How to generate sample XML documents from their DTD or XSD?

对于细微的要求,你应该自己编程