使用Java根据XSD模式生成XML

3
我需要创建一种基于XSD架构的'骨架'XML。这些架构定义的文档没有命名空间,是由其他开发人员手动编写而非自动化生成。其中没有混合内容,即元素仅包含元素或仅包含文本。此样例XML的规则如下:
  • 只能包含元素而不能包含���文本的元素不应在样例XML中创建
  • 所有其他可选和必填元素应包含在样例XML中
  • 即使可以出现多次,元素也应仅创建一次
  • 任何其他节点,如属性,注释,处理指令等都应被省略—样例XML将是一个'元素树'
是否有Java中的API或工具可以生成这样的样例XML?我正在寻找起始指针。
这需要以可靠的方式通过编程完成,因为该样例XML会被其他XSLT转换使用。
2个回答

4

希望下面的代码能够满足您的需求

    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

xsd 转 xml:

1:您可以使用 Eclipse(右键单击并选择生成)

2:Sun/Oracle 多模式验证器

3:xmlgen

请参见: 如何从DTD或XSD生成示例XML文档?

对于细微的要求,您应该自己编写程序。


不确定为什么这个被评为-1,链接基本上涵盖了所有选项。我认为你将不得不采取现有的解决方案并根据自己的需求进行修改,但许多建议都是一个很好的起点。 - Sprotty
问题是询问如何使用JAVA编程从XSD生成XML样例,而不是使用工具。 - NoName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接