XML(可擴展標記語言)用於標記數據、定義類型,適合網絡傳輸。與 HTML 對比:
<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>35.2</price>
</book>
</bookstore>
DOM 將整個文檔加載到內存形成樹結構,適合中小型文檔。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("language.xml"));
Element root = document.getDocumentElement();
System.out.println("cat=" + root.getAttribute("cat"));
NodeList list = root.getElementsByTagName("lan");
for (int i = 0; i < list.getLength(); i++) {
Element lan = (Element) list.item(i);
System.out.println("id=" + lan.getAttribute("id"));
NodeList children = lan.getChildNodes();
for (int j = 0; j < children.getLength(); j++) {
Node node = children.item(j);
if (node instanceof Element) {
System.out.println(node.getNodeName() + "=" + node.getTextContent());
}
}
}
輸出:
cat=it
id=1
name=java
ide=Eclipse
id=2
name=Swift
ide=Xcode
id=3
name=C#
ide=Visual Studio
從內到外創建節點,最後用 Transformer 輸出。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("Languages");
root.setAttribute("cat", "it");
// 創建 lan1
Element lan1 = document.createElement("lan");
lan1.setAttribute("id", "1");
lan1.appendChild(createElementWithText(document, "name", "Java"));
lan1.appendChild(createElementWithText(document, "ide", "Eclipse"));
// ... 同理創建 lan2, lan3
root.appendChild(lan1);
root.appendChild(lan2);
root.appendChild(lan3);
document.appendChild(root);
// 輸出到字符串或文件
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(document), new StreamResult(writer));
System.out.println(writer.toString()); // 控制台輸出
transformer.transform(new DOMSource(document), new StreamResult(new File("newxml.xml"))); // 寫文件
DOM4J 性能優異、API 友好,需引入第三方 JAR。
String xmlString = "<bookstore><book><title>...</title></book></bookstore>";
Document document = DocumentHelper.parseText(xmlString);
// 打印
System.out.println(document.asXML());
// 寫文件
XMLWriter writer = new XMLWriter(new FileWriter("book.xml"));
writer.write(document);
writer.close();
刷新項目目錄即可看到生成的 book.xml。