通过 DOM4J 操作 XML

1. 创建XML文档

方法一:

        Document  document = DocumentHelper.createDocument();
        Element  root = DocumentHelper.createElement("stus");
        document.setRootElement(root);

方法二:

        Element root = DocumentHelper.createElement("stus");
        Document document = DocumentHelper.createDocument(root);


2. 添加属性

    stu1.addAttribute("id","01");

3. 添加子元素及设置元素内容


     在 Branch 接口中定义了 AddElement() 方法
     public Element addElement(String name)


     Element name = stu1.addElement("name");
     name.setText("zhangsan");

4. 输出文档

在 org.dom4j.io 包中,DOMWriter 类可以将 dom4j 树输出为 W3C DOM 的 Document 对象,SAXWriter  类可以将  dom4j 树作为 SAX 事件流输出,而  XMLWriter  类则提供了将  dom4j  树的各个部分以  XML 流的方式输出能力。

       //XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("res/stus2.xml"));

        XMLWriter xmlWriter = new XMLWriter(new FileWriter("res/stus2.xml"));
        xmlWriter.write(document);
        xmlWriter.close();
 

5. 控制文档输出格式

        // org.dom4j.io.OutputFormat;
        // 缩进和换行
        OutputFormat format = new OutputFormat("    ",true);
        // 使用美化格式
        OutputFormat format1 = OutputFormat.createPrettyPrint();
        format1.setEncoding("utf-8");
        format1.setIndent("    ");

package com.dom4j;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import java.io.FileWriter;

public class demo01 {
    public static void main(String[] args) throws Exception {

        /*Document document = DocumentHelper.createDocument();
        Element root = DocumentHelper.createElement("stus");
        document.setRootElement(root);*/

        Element root = DocumentHelper.createElement("stus");
        Document document = DocumentHelper.createDocument(root);

        Element stu1 = root.addElement("stu");
        stu1.addAttribute("id","01");
        Element name = stu1.addElement("name");
        name.setText("张三");
        Element age = stu1.addElement("age");
        Element sex = stu1.addElement("sex");

        name.setText("zhangsan");
        age.setText("18");
        sex.setText("男");

        // org.dom4j.io.OutputFormat;
        // 缩进和换行
        OutputFormat format = new OutputFormat("    ",true);
        // 使用美化格式
        OutputFormat format1 = OutputFormat.createPrettyPrint();
        format1.setEncoding("utf-8");
        format1.setIndent("    ");

        //XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("res/stus2.xml"));
        XMLWriter xmlWriter = new XMLWriter(new FileWriter("res/stus2.xml"),format1);
        xmlWriter.write(document);
        xmlWriter.close();
        System.out.println("OVER");

    }
}

执行结果:

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

<stus>
    <stu id="01">
        <name>zhangsan</name>
        <age>18</age>
        <sex>男</sex>
    </stu>
</stus>

 

6. 构建dom4j树


dom4j 在 org.dom4j.io 包中,提供了两个类: DOMReader 和 SAXReader

DOMReader 从一个现有的 W3C DOM 树构建 dom4j 树,而 SAXReader 则使用 SAX 解析器,从不同的输入源来构造 dom4j树。

 //SAXReader 类来构造dom4j 文档对象
        SAXReader saxReader = new SAXReader();
        org.dom4j.Document document = saxReader.read(new File("res/stus.xml"));

        //DOMReader类构造dom4j文档对象
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = factory.newDocumentBuilder();
        org.w3c.dom.Document document1= documentBuilder.parse("res/stus.xml");

        DOMReader domReader = new DOMReader();
        org.dom4j.Document document2 = domReader.read(document1);


7. 访问根元素

document.getRootElement();
 

8、访问节点


Java.util.List childrenLis=elt.elements();
Java.util.List childrenList=elt.elements(“hi.xml”);
Element eltChild=elt.element(“hi.xml”);
要迭代某个元素的所有子元素
    for(java.util.Iterator it=root.elementIterator();it.hasNext();)
     {
       Element element=(Element)it.next();
      ……
    }


9. 删除某个元素

 可以用Branch接口中的remove方法

Element eltStru=root.element(“student”);

 root.remove(eltStu);

10. 访问属性

    java.util.List attrList=elt.attributes();
   Attribute attr=elt.attribute(“sn”);
   String attrValue=elt.attributeValue();
   elt.remove(elt.attribute(“sn”));
 

package com.dom4j;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.DOMReader;
import org.dom4j.io.SAXReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import java.util.Iterator;
import java.util.List;

public class Demo02 {
    public static void main(String[] args) throws Exception{

        //SAXReader 类来构造dom4j 文档对象
        SAXReader saxReader = new SAXReader();
        org.dom4j.Document document = saxReader.read(new File("res/stus2.xml"));

        //DOMReader类构造dom4j文档对象
      /*  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = factory.newDocumentBuilder();
        org.w3c.dom.Document document1= documentBuilder.parse("res/stus.xml");

        DOMReader domReader = new DOMReader();
        org.dom4j.Document document2 = domReader.read(document1);*/

        Element root = document.getRootElement();

        //root.element("stu");
        List<Element> elements = root.elements();

        Iterator iterator = root.elementIterator();

        while (iterator.hasNext()){
            Element stu = (Element)iterator.next();

            System.out.println("学号:"+stu.attributeValue("id"));
            System.out.println("姓名:"+stu.elementText("name"));
            System.out.println("年龄:"+stu.elementText("age"));
            System.out.println("性别:"+stu.elementText("sex"));

            System.out.println("+++++++++++++++++++");
        }

    }
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值