使用DOM4J解析XML

使用DOM4J解析XML

DOM4J同时具备了DOM写入和SAX读取的操作,并做了存储优化,使用DOM4J时要导入dom4j的开发包dom4j-x.x.x.jar
DOM4J提供有自己的一堆实现类库:
DocumentHelper工具类:org.dom4j.DocumentHelper

No返回值方法名描述
1DocumentcreateDocument()创建新的文档
2ElementcreateElement(String name)创建新的文档,同时设置根元素

分支节点:org.dom4j.Branch

No返回值方法名描述
1voidadd(Element element)追加子节点
2voidaddElement(String name)创建子节点并追加
3Nodenode(int index)取得指定索引的节点
4intnodeCount()取得子结点个数
5booleanremove(Element element)删除子节点

节点使用:org.dom4j.Node

No返回值方法名描述
1StringgetName()取得节点名字
2voidsetName(String name)设置节点名字
3ElementgetParent()取得父节点
4StringgetText()取得节点内容
5voidsetText(String text)设置节点内容

文档对象:org.dom4j.Document

No返回值方法名描述
1ElementgetRootElement()取得根节点

元素对象:org.dom4j.Element

No返回值方法名描述
1Attributeattribute(String name)取得指定名称的属性
2StringattributeValue(String name)取得指定名称的属性内容
3Elementelement(String name)取得指定名称的元素
4IteratorelementIterator(String name)指定元素的Iterator对象
5Listelements(String name)取得指定的子元素集合
6Listelements()取得所有的子元素

输出格式化类:org.dom4j.io.OutputFormat

No返回值方法名描述
1OutputFormatcreateCompactFormat()紧凑格式输出
2OutputFormatcreatePrettyPrint()缩进格式输出

XML文件输出类:org.dom4j.io.XMLWriter

No返回值方法名描述
1XMLWriter(OutputStream out, OutputFormat format)构造方法
2voidwrite(Document doc)输入文档

SAX解析输入类:org.dom4j.io.SAXReader

No返回值方法名描述
1SAXReader()构造方法
2Documentread(InputStream in)读取输入流数据

使用DOM4J实现XML文件输出
package 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.File;
import java.io.FileOutputStream;

public class WriteTest {
    public static void main(String[] args)throws Exception {
        File file = new File("E:"+File.separator+"petshop.xml");
        if(!file.getParentFile().exists()){
            file.getParentFile().mkdirs();
        }
        if(!file.exists()){
            file.createNewFile();
        }
        String[] names = {"旺财","大明"};
        String[] species = {"拉布拉多","品种独特"};
        String[] prices = {"33.6","250.38"};
        Document document = DocumentHelper.createDocument();
        Element shopEle = document.addElement("shop");
        for(int x=0;x<names.length;x++){
            Element petEle = shopEle.addElement("pet");
            petEle.addAttribute("id",String.valueOf(x+1));
            petEle.addElement("name").setText(names[x]);
            petEle.addElement("specie").setText(species[x]);
            petEle.addElement("price").setText(prices[x]);
        }
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter writer = new XMLWriter(new FileOutputStream(file),format);
        writer.write(document);
        writer.close();
    }
}

运行程序发现成功生成petshop.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<shop>
  <pet id="1">
    <name>旺财</name>
    <specie>拉布拉多</specie>
    <price>33.6</price>
  </pet>
  <pet id="2">
    <name>大明</name>
    <specie>品种独特</specie>
    <price>250.38</price>
  </pet>
</shop>
使用DOM4J读取文件
package dom4j;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Iterator;

public class ReadTest {
    public static void main(String[] args)throws Exception {
        File file = new File("E:"+File.separator+"petshop.xml");
        if(!file.exists()){
            System.exit(0);
        }
        SAXReader reader = new SAXReader();
        InputStream input = new FileInputStream(file);
        Document document = reader.read(input);
        Element rootEle = document.getRootElement();
        Iterator<Element> petsIter = rootEle.elements("pet").iterator();
        while(petsIter.hasNext()){
            Element petEle = petsIter.next();
            String id = petEle.attributeValue("id");
            String name = petEle.element("name").getText();
            String specie = petEle.element("specie").getText();
            String price = petEle.element("price").getText();
            System.out.println("id="+id+"\tname="+name+"\tspecie="+specie+"\tprice="+price);
        }
        input.close();
    }
}

运行程序发现数据读取成功:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值