zoukankan      html  css  js  c++  java
  • 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();
            }
       }
  • 相关阅读:
    看到关于java资料比较全的,自己收藏
    ie6下pnghack——css方案
    git基本操作
    购物车功能实现
    jquery学习:获取位置position(),offset(),scrollTop困惑
    Datax3.0使用说明
    Scala字符串操作
    Scala中class、object、case class、case object区别
    Scala构造函数
    scala数组操作
  • 原文地址:https://www.cnblogs.com/szj-ang/p/7489319.html
Copyright © 2011-2022 走看看