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