gpt4 book ai didi

java - 使用 Java 从 XSD 模式生成 xml

转载 作者:行者123 更新时间:2023-12-01 08:46:43 26 4
gpt4 key购买 nike

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

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

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

此示例 xml 的规则是:

  • 不应在示例 xml 中创建仅包含文本内容的元素
  • 所有其他可选和强制元素都应包含在示例 xml 中
  • 即使元素可以出现多次,也只能创建一次
  • 应省略任何其他节点,例如属性、注释、处理指令等 - 示例 xml 将是“元素树”

Java 中是否有可以生成此类示例 xml 的 API 或工具?我正在寻找从哪里开始的指导。

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

最佳答案

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

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

}

关于java - 使用 Java 从 XSD 模式生成 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42613338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com