dom4j_解析xml_生成和读取xml文件

第三方提供的,开源的,JDOM升级版,强大的解析xml文件的插件。

它的核心是使用Document对象进行操作,其中使用迭代器模式遍历元素的子元素。

 


 使用前,先下载并配置好jar包


 一、生成xml文件

步骤:

  1、通过DocumentHelper生成一个Document对象:createDocument()

  2、通过Document对象添加并得到根元素:addElement(元素名)

  3、给元素添加子元素:addElement(元素名)

  4、给元素添加属性:addAttribute(属性名,属性值)

  5、给元素添加内容:addText(内容)

  6、创建一个输出流。

     (1)、使用Writer输出流,xml的元素会都在一行内,不易于查看。

     (2)、使用XMLWriter可以指定输出格式,使用OutputFormat可以创建良好的输出格式:

            XMLWriter writer =  new XMLWriter(new FileWriter(new File(destPath)),OutputFormat.createPrettyPrint())

  7、把Document生成的xml文件输出到指定位置:

      (1)、普通输出流:doc.write(writer)

      (2)、XMLWriter输出流:writer.write(doc)

  8、关闭输出流

例子:在指定目录下生成一个xml文件。

    static void writeXml(String destPath) throws Exception {
        //1、通过DocumentHelper生成一个Document对象
        Document doc = DocumentHelper.createDocument();
        //2、通过Document对象添加并得到根元素
        Element root = doc.addElement("persons");
        //3、给元素添加子元素
        Element person = root.addElement("person");
        //4、给元素添加属性
        person.addAttribute("id","001");

        person.addElement("name").addText("二狗子");
        person.addElement("age").addText("18");
        Element person2 = root.addElement("person");
        person2.addElement("name").addText("三娃子");
        person2.addElement("age").addText("32");

//        //5、准备输出流
//        Writer writer = new FileWriter(new File(destPath));
//        //6、把doc生成的xml文件输出到指定路径下
//        doc.write(writer);
//        writer.close();

        //5、创建一个良好的输出格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        //6、获取XMLWriter输出流,指定输出格式
        XMLWriter writer = new XMLWriter(new FileWriter(new File(destPath)),format);
        //7、把doc生成的xml文件输出到指定路径下
        writer.write(doc);
        //8、关闭io流
        writer.close();
    }

运行后会在指定目录下生成persons.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<persons>
  <person id="001">
    <name>二狗子</name>
    <age>18</age>
  </person>
  <person>
    <name>三娃子</name>
    <age>32</age>
  </person>
</persons>

二、读取xml文件

步骤:

  1、创建SAXReader对象,用于读取xml文件:SAXReader reader = new SAXReader()

  2、读取xml文件,得到Document对象:Document doc = reader.read(new File(srcPath))

  3、通过Document对象获取根元素:getRootElement()

  4、通过父元素获取子元素:

      (1)、获取迭代器:elementIterator(),迭代获取。

      (2)、指定元素名:element(元素名)

  5、通过元素获取它的属性:

      (1)、获取迭代器:attributeIterator(),迭代获取。

      (2)、指定索引(0开始)或名字:attribute(索引)、attribute(属性名)

例子:实现了读取指定路径下的xml文件,并且封装了一个打印某个元素下所有元素数据的方法。

    static void readXml(String srcPath) throws Exception {
        //1、创建SAXReader对象,用于读取xml文件
        SAXReader reader = new SAXReader();
        //2、读取xml文件,得到Document对象
        Document doc = reader.read(new File(srcPath));
        //通过Document对象获取根元素
        Element root = doc.getRootElement();
        //通过父元素获取子元素:1、迭代器。2、指定元素名
        Element person = root.element("person");
        //通过元素获取它的属性:1、迭代器。2、指定索引(0开始)或名字。
        Attribute id = person.attribute(0);
        person.attributeIterator();
        System.out.println(id.getName()+"="+id.getText());
        System.out.println("------------------------------");
        //4、打印文档下的所有元素
        outAllElement(root);
    }

    /**
     * 打印该元素下的数据
     */
    static void outAllElement(Element root){
        //获取元素的子元素迭代器
        Iterator<Element> it = root.elementIterator();
        while (it.hasNext()){
            Element temp = it.next();
            //如果该元素有内容则打印内容
            if(!temp.getText().trim().equals("")){
                System.out.println(temp.getName()+"="+temp.getText());
            }else {
                System.out.println(temp.getName());
            }
            //递归条件:如果子元素下面还有元素
            if(temp.elementIterator()!=null){
                //递归体
                outAllElement(temp);
            }
        }
    }

测试代码:

    public static void main(String[] args) throws Exception {
        writeXml("persons.xml");
        readXml("persons.xml");
    }

运行结果:

 

posted @ 2022-12-09 23:27  在博客做笔记的路人甲  阅读(890)  评论(0编辑  收藏  举报