【问题标题】:Link XML and XSD using java使用 java 链接 XML 和 XSD
【发布时间】:2020-09-17 18:42:56
【问题描述】:

我正在尝试为一个 xml 文件编写标题,所以它会是这样的:

<file xmlns="http://my_namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://my_namespace file.xsd">

但是,我似乎无法找到如何使用 java 中的 Document 类来做到这一点。这就是我所拥有的:

public void exportToXML() {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;

        try {

            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.newDocument();
            doc.setXmlStandalone(true);
            doc.createTextNode("<file xmlns=\"http://my_namespace"\n" +
                    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
                    "xsi:schemaLocation=\"http://my_namespace file.xsd\">");
            Element mainRootElement = doc.createElement("MainRootElement");
            doc.appendChild(mainRootElement);

            for(int i = 0; i < tipoDadosParaExportar.length; i++) {
                mainRootElement.appendChild(criarFilhos(doc, tipoDadosParaExportar[i]));
            }
            Transformer tr = TransformerFactory.newInstance().newTransformer();
            tr.transform(new DOMSource(doc),
                    new StreamResult(new FileOutputStream(filename)));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我尝试使用 createTextNode 将其写入文件,但它也不起作用,它只在显示元素之前写入版本。

PrintStartXMLFile

如果您能帮助我,将不胜感激。祝你有美好的一天

【问题讨论】:

    标签: java xml xsd marshalling


    【解决方案1】:

    您的createTextNode() 方法仅适用于创建文本节点,不适用于创建元素。为此,您需要使用 createElement()。如果你通过构建树来做到这一点,那么你需要构建节点,你不能写词法标记。

    我不确定MainRootElement 应该是什么;你只给出了你想要的输出的一部分,所以很难说。

    创建一个 DOM 树然后对其进行序列化是一种构建 XML 文件的非常费力的方法。使用XMLEventWriter 之类的东西更容易。但老实说,我对所有现有方法感到沮丧,并为此编写了一个新库作为 Saxon 10 的一部分。它简称为“Push”,看起来像这样:

    Processor proc = new Processor();
    Serializer serializer = proc.newSerializer(new File(fileName));
    Push push = proc.newPush(serializer);
    Document doc = push.document(true);
    doc.setDefaultNamespace("http://my_namespace");
    Element root = doc.element("root")
      .attribute(new QName("xsi", "http://www.w3.org/2001/XMLSchema-instance", "schemaLocation"), 
                 "http://my_namespace file.xsd");
    doc.close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 2015-12-12
      相关资源
      最近更新 更多