Android Dom4j解析xml

本文深入讲解DOM4J,一个高性能的Java XML API,用于读写XML文件。文章涵盖DOM4J的安装、基本使用方法,包括解析节点和属性值、转换节点为XML字符串、遍历数据、增加、删除及修改节点等操作。
摘要由CSDN通过智能技术生成

前言

  • dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的,dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的DOM技术,同时它也是一个开放源代码的软件。
  • 在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的,如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j
  • Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP

以上内容来自于百度百科

在使用它之前,记得要先导一下包
下载地址:https://dom4j.github.io/
(如果下载不了,请翻墙下载)

使用

  • 先看一下我们要解析的内容,然后观察一下XML文件的结构与组成
  • 但只要简单了解一下就好了,然后继续往后面看
<?xml version="1.0" encoding="utf-8"?>
<data>

   <action value="大家请看这里,哈哈哈1">
      <array>
         <name type="号码">1</name>
         <name type="号码">2</name>
      </array>
      <array>
         <name>开始咯!</name>
         <name>开始咯!</name>
         <name>开始咯!</name>
      </array>
   </action>
   
</data>

解析节点值

  • 写的时候记得要选Dom4j包下的类
  • XML文件的主要数据就是节点值,节点值可以是一个文本节点,也可以是其他元素节点
  • 比如上面的那个XML文件,根节点是data,根节点的节点值是action节点
SAXReader sax=new SAXReader();
Document doc=sax.read(new File("/storage/emulated/0/360/样本.xml"));
Element root=doc.getRootElement();
Element array=root.element("action").element("array");
System.out.println(array.element("name").getText());
System.out.println(array.elements("name").get(1).getText());
  • 运行一下
12

解析属性值

  • 属性是为了给元素提供额外的信息
SAXReader sax=new SAXReader();
Document doc=sax.read(new File("/storage/emulated/0/360/样本.xml"));
Element root=doc.getRootElement();
Element array=root.element("action").element("array");
System.out.println(array.element("name").attributeValue("type"));
System.out.println(array.elements("name").get(1).attributeValue("type"));
  • 解析结果
号码
号码

节点转XML字符串

  • 属性值和节点值都有了,Dom4j还提供了其他的一些其他方法,比如下面这个
  • 可以将任意一个节点转化为XML字符串,具体如下:
SAXReader sax=new SAXReader();
Document doc=sax.read(new File("/storage/emulated/0/360/样本.xml"));
Element root=doc.getRootElement();
Element array=root.element("action").element("array");
System.out.println(array.asXML());
  • 输出结果
<array>
   <name type="号码">1</name>
   <name type="号码">2</name>
</array>

遍历数据

  • 当我们需要对整个xml文件进行解析时,我们就需要遍历数据,这里我们采用递归方法实现,看起来还算简洁吧!
SAXReader sax=new SAXReader();
Document doc=sax.read(new File("/storage/emulated/0/360/样本.xml"));
Element root=doc.getRootElement();
parse(root);
private static void parse(Element e){
   System.out.println(e.getName());
   List<Element>list=e.elements();
   for (Element element:list){
      parse(element);
   }
}

增加节点

  • 仅仅是解析xml文件怎么行呢,当然还要可以增加呀,哈哈哈…
//创建一个空白文档
Document doc =DocumentHelper.createDocument();
//增加根节点
Element root=doc.addElement("data");
//在根节点中继续增加节点
Element action=root.addElement("action");
//添加一条属性
action.addAttribute("value","这是添加的");
Element array=action.addElement("array");
Element name1=array.addElement("name");
Element name2=array.addElement("name");
name1.addAttribute("type","号码");
name2.addAttribute("type","号码");
name1.addText("1号");
name2.addText("2号");

//写入xml文件
OutputFormat format=OutputFormat.createCompactFormat();
format.setEncoding("utf-8");//GBK
XMLWriter writer=new XMLWriter(new FileOutputStream("/storage/emulated/0/360/样本2.xml"),format);
writer.write(doc);
writer.close();
  • 运行结果
<?xml version="1.0" encoding="utf-8"?>
<data>
   <action value="这是添加的">
      <array>
         <name type="号码">1</name>
         <name type="号码">2</name>
      </array>
   </action>
</data>

删除节点

  • 有的时候,我们需要删除单独的某个节点,这时候,dom4也j能够为我们实现
SAXReader sax=new SAXReader();
Document doc=sax.read(new File("/storage/emulated/0/360/样本2.xml"));
Element array=doc.getRootElement().element("action").element("array");
array.remove(array.element("name"));
//array.remove(array.elements("name").get(0));

OutputFormat format=OutputFormat.createCompactFormat();
format.setEncoding("utf-8");
XMLWriter writer=new XMLWriter(new FileOutputStream("/storage/emulated/0/360/样本3.xml"),format);
writer.write(doc);
writer.close();
  • 运行结果
<?xml version="1.0" encoding="utf-8"?>
<data>
   <action value="这是添加的">
      <array>
         <name type="号码">2</name>
      </array>
   </action>
</data>

修改节点

  • 如果一个xml文件不能修改,那么xml文件的作用就会大大的打折扣了
SAXReader sax=new SAXReader();
Document doc=sax.read(new File("/storage/emulated/0/360/样本2.xml"));
Element array=doc.getRootElement().element("action").element("array");
array.setAttributeValue("test","修改xml文件");

OutputFormat format=OutputFormat.createCompactFormat();
format.setEncoding("utf-8");
XMLWriter writer=new XMLWriter(new FileOutputStream("/storage/emulated/0/360/样本3.xml"),format);
writer.write(doc);
writer.close();
  • 运行结果
<?xml version="1.0" encoding="utf-8"?>
<data>
   <action value="这是添加的">
      <array test="修改xml文件">
         <name type="号码">2</name>
      </array>
   </action>
</data>

本文到此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值