Java——DOM方式生成 XML 文件


 

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();
        }
   }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM