【发布时间】:2021-02-25 20:49:02
【问题描述】:
我从互联网上搜集了一些代码。我只需要附加到 XML 文件末尾的东西。
当我使用此代码时,它会正确格式化新条目,但之前存在的 xml 也会被进一步隔开。我希望它添加到结尾而不触及之前的任何内容。如果没有transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","2"),它只会将所有新内容输出到一行。
package xml;
import java.util.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class Writer {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse("input.xml");
Element root = document.getDocumentElement();
Element newUser = document.createElement("user");
Element name = document.createElement("name");
name.appendChild(document.createTextNode("test_name"));
newUser.appendChild(name);
Element username = document.createElement("username");
username.appendChild(document.createTextNode("test_username"));
newUser.appendChild(username);
Element email = document.createElement("email");
email.appendChild(document.createTextNode("test_email"));
newUser.appendChild(email);
Element password = document.createElement("password");
password.appendChild(document.createTextNode("test_password"));
newUser.appendChild(password);
root.appendChild(newUser);
DOMSource source = new DOMSource(document);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","2");
StreamResult result = new StreamResult("input.xml");
transformer.transform(source, result);
}
}
代码运行前的 XML
<?xml version = "1.0"?>
<Test>
<user>
<name>alpha</name>
<username>alpha1</username>
<email>alpha@gmail.com</email>
<password>a</password>
</user>
<user>
<name>beta</name>
<username>beta1</username>
<email>beta@gmail.com</email>
<password>b</password>
</user>
<user>
<name>omega</name>
<username>omega1</username>
<email>omega@gmail.com</email>
<password>w</password>
</user>
</Test>
代码运行后的 XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Test>
<user>
<name>alpha</name>
<username>alpha1</username>
<email>alpha@gmail.com</email>
<password>a</password>
</user>
<user>
<name>beta</name>
<username>beta1</username>
<email>beta@gmail.com</email>
<password>b</password>
</user>
<user>
<name>omega</name>
<username>omega1</username>
<email>omega@gmail.com</email>
<password>w</password>
</user>
<user>
<name>test_name</name>
<username>test_username</username>
<email>test_email</email>
<password>test_password</password>
</user>
</Test>
【问题讨论】: