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();
        }
   }
 posted on 2017-11-16 15:09  【邵江】  阅读(1704)  评论(0编辑  收藏  举报