在xml中仅创建根元素在java中不起作用

时间:2014-02-17 15:35:27

标签: java xml

我正在尝试创建一个xml文件,并且只创建根节点,在我添加一些元素之后,这就是我想要的:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Users>
</Users>

但这就是我所拥有的:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Users/>

这是我的代码:

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document doc = documentBuilder.newDocument();
                Element root_users = doc.createElement("Users");
                doc.appendChild(root_users);

                DOMSource source = new DOMSource(doc);

                TransformerFactory transformerFactory = TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                StreamResult result = new StreamResult(path+"users.xml");
                transformer.transform(source, result);

我无法理解为什么不起作用,我想只创建根元素,因为我想用这个检索那个根节点:

Document document = documentBuilder.parse(pathToWrite+"users.xml");
Element root = document.getDocumentElement();

并将孩子附加到其中,最后得到这个结构:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Users>
  <User>
    <Name>Carl</Name>
  </User>
  <User>
    <Name>Bob</Name>
  </User>
</Users>

我怎么做?

2 个答案:

答案 0 :(得分:2)

<Users/>

是空元素的简写,即它与

完全相同
<Users></Users>

如果您将子元素添加到此元素,您将获得所需的输出。

请注意,<Users/>

相同
<Users>
</Users>

因为后一个元素不为空 - 它包含换行符。要创建它,您需要将文本节点子项添加到root_users元素

Document doc = documentBuilder.newDocument();
Element root_users = doc.createElement("Users");
doc.appendChild(root_users);
root_users.appendChild(doc.createTextNode("\n"));

答案 1 :(得分:1)

你想要什么,你得到的是功能相同的。

最后的/>只是表示结束标记的简写。

无论如何都要尝试附加内容,看看会发生什么。