DOM方式生成 XML 文件
首先創建 DOM 樹 的部分:
創建 DocumentBuilderFactry 對象
//創建一個 DocumentBuilderFactory 對象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
創建 DocumentBuilder 對象
//創建DocumentBuilder對象 DocumentBuilder db = dbf.newDocumentBuilder();di
創建 Document 對象
//創建 Document 對象 Document document = db.newDocument();
創建根節點
//創建根節點 Element school = document.createElement("school");
創建子節點
//創建子節點 Element student = document.createElement("student");
創建 student 的子節點
//創建student的子節點 Element name = document.createElement("name"); Element age = document.createElement("age"); Element address = document.createElement("address");
給 student 的子節點添加文內容
//給 name 節點添加 文本內容 name.setTextContent("小明"); age.setTextContent("18"); address.setTextContent("北京市海定區五道口");
把 student 的子節點添加到 student 節點 下
//把子節點 添加到 student 節點下 student.appendChild(name); student.appendChild(age); student.appendChild(address);
向 student 節點 添加屬性和屬性值
//向 studet 節點添加屬性和屬性值 student.setAttribute("id", "1");
向根節點下添加 student 節點
//向 school 添加子節點 school.appendChild(student);
將根節點添加到 dom 樹中
//將 根節點(已經包含子節點 )添加到dom樹中 document.appendChild(school);
DOM 樹生成完事了
接着將 DOM 樹轉換成 XML 文件
創建 TransformerFactory 對象
//創建 TransformerFactory 對象 TransformerFactory tff = TransformerFactory.newInstance();
創建 Transformer 對象
//創建 Transformer 對象 Transformer tf = tff.newTransformer();
使用 Transformer 的 transform 方法把 DOM 樹轉換成 XML 文件
//使用 Transformer 的 transform 方法把Dom樹轉換成 XML 文件 tf.transform(new DOMSource(document), new StreamResult(new File("School_01.xml")));
生成 XML 文件完事
運行結果:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><school><student id="1"><name>小明</name><age>18</age><address>北京市海定區五道口</address></student></school>
我們可以看到生成 XML 文件成功了,但是生成的內容是一整行,沒有自動換行,不易讀
設置XML 文件自動換行
//設置生成的 XML 文件自動換行 tf.setOutputProperty(OutputKeys.INDENT, "yes");
再次運行結果,可以看到生成的 XML 文件自動換行了:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <school> <student id="1"> <name>小明</name> <age>18</age> <address>北京市海定區五道口</address> </student> </school>
此外,可以看到,在 XML 文件申明部分中,有 standalone 這個屬性,該屬性表示當前 XML 是否有相對應的 dtd 或 scheam 文件作為其說明文檔。
若屬性值為“yes",則代表當前 XM了 文件沒有 dtd 或 schema 文件作為其說明文檔。
由於沒有用到 dtd 或 schema ,所以可以 通過 Document 的 setXmlStandalone()方法將該屬性隱藏掉。
//隱藏 XML文件 standalone 屬性 document.setXmlStandalone(true);
再次測試可以發現已經沒有該屬性了。
完整代碼
try { //創建一個 DocumentBuilderFactory 對象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //創建DocumentBuilder對象 DocumentBuilder db = dbf.newDocumentBuilder(); //創建 Document 對象 Document document = db.newDocument(); //隱藏 XML文件 standalone 屬性 document.setXmlStandalone(true); //創建根節點 Element school = document.createElement("school"); //創建子節點 Element student = document.createElement("student"); //創建student的子節點 Element name = document.createElement("name"); Element age = document.createElement("age"); Element address = document.createElement("address"); //給 name 節點添加 文本內容 name.setTextContent("小明"); age.setTextContent("18"); address.setTextContent("北京市海定區五道口"); //把子節點 添加到 student 節點下 student.appendChild(name); student.appendChild(age); student.appendChild(address); //向 studet 節點添加屬性和屬性值 student.setAttribute("id", "1"); //向 school 添加子節點 school.appendChild(student); //將 根節點(已經包含子節點 )添加到dom樹中 document.appendChild(school); //..將 dom樹轉換為 XML文件 //創建 TransformerFactory 對象 TransformerFactory tff = TransformerFactory.newInstance(); //創建 Transformer 對象 Transformer tf = tff.newTransformer(); //設置生成的 XML 文件自動換行 tf.setOutputProperty(OutputKeys.INDENT, "yes"); //使用 Transformer 的 transform 方法把Dom樹轉換成 XML 文件 tf.transform(new DOMSource(document), new StreamResult(new File("School_01.xml"))); } catch (ParserConfigurationException e) { e.printStackTrace(); }catch (TransformerException e) { e.printStackTrace(); } }