[使用Java链接XML和XSD

问题描述 投票:0回答:1

我正在尝试为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个回答
0
投票

您的createTextNode()方法仅适用于创建文本节点,不适用于创建元素。您需要为此使用createElement()。如果要通过构建树来执行此操作,则需要构建节点,则无法编写词法标记。

我不确定MainRootElement应该是什么;您只给出了所需输出的一部分,因此很难分辨。

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

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();
© www.soinside.com 2019 - 2024. All rights reserved.