我正在尝试为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将其写到文件上,但是它也不起作用,它只在显示元素之前写了版本。
如果能帮助我,将不胜感激。祝你有美好的一天
您的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();