韩顺平XML学习6

dom4jjdom

 

为什么有dom4j

dom 缺点 : 比较耗费内存

sax缺点只能对xml进行读取,但是不能去 修改,添加,删除.

dom4j :既可以提高效率,同时也可以进行crud

特别说明因为dom4j不是sun公司的产品,所以我们开发dom4j需要引入jar.

 

(1) 快速入门 如何适用dom4j技术对xml文件进程(crud)操作

package four;

 

import java.io.File;

import java.io.FileOutputStream;

import java.io.FileWriter;

import java.util.Iterator;

import java.util.List;

 

import org.dom4j.Document;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

 

public class Dom4j {

 

/**

 * 演示使用dom4jxml文件进行crud操作

 * @param args

 */

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

 

//1,得到解析器

SAXReader saxReader=new SAXReader();

//2,指定解析哪个xml文件

Document document=saxReader.read(new File("src/four/myclasses3.xml"));

//list(document.getRootElement());

//read(document);

//add(document);

//del(document);

//update(document);

addByIndex(document);

}

//添加一个元素到指定位置林冲到 卢俊义后,在武松前)

public static void addByIndex(Document document) throws Exception{

//创建一个元素

Element newHero=DocumentHelper.createElement("学生");

newHero.setText("林冲");

//得到所有学生的list

List allHeros=document.getRootElement().elements("学生");

for(int i=0;i<allHeros.size();i++){

//取出各个人的名

Element name=((Element)allHeros.get(i)).element("名字");

if(name.getText().equals("卢俊义")){

//System.out.println("发现 "+i);

allHeros.add(i+1, newHero);

break;

}

}

//allHeros.add(1,newHero);

//直接输出会出现中文乱码

OutputFormat output=OutputFormat.createPrettyPrint();

output.setEncoding("utf-8");

//xml文件更新

XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/four/myclasses3.xml")),output);

//XMLWriter writer = new XMLWriter(new FileWriter( "src/four/myclasses3.xml" ),output);

writer.write(document);

writer.close();

}

//更新元素(要求把所有学生的年龄+3)

public static void update(Document document ) throws Exception{

//得到所有学生的年龄

List<Element> stus =document.getRootElement().elements("学生");

for(Element el:stus){

//el中取出年龄

Element age=el.element("年龄");

age.setText((Integer.parseInt(age.getText())+3)+"");

Element name=el.element("名字");

//name.setAttributeValue("别名", "hello,world");

name.addAttribute("别名2""okok");

}

//直接输出会出现中文乱码

OutputFormat output=OutputFormat.createPrettyPrint();

output.setEncoding("utf-8");

//xml文件更新

XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/four/myclasses3.xml")),output);

//XMLWriter writer = new XMLWriter(new FileWriter( "src/four/myclasses3.xml" ),output);

writer.write(document);

writer.close();

}

//删除元素(要求:删除第一个学生)

public static void del(Document document)throws Exception{

//找出该元素

Element stu1=document.getRootElement().element("学生").element("名字");

//删除元素

stu1.getParent().remove(stu1);

//删除元素的某个属性

//stu1.remove(stu1.attribute("别名"));

//直接输出会出现中文乱码

OutputFormat output=OutputFormat.createPrettyPrint();

output.setEncoding("utf-8");

//xml文件更新

XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/four/myclasses3.xml")),output);

//XMLWriter writer = new XMLWriter(new FileWriter( "src/four/myclasses3.xml" ),output);

writer.write(document);

writer.close();

}

//添加元素(要求:添加一个学生到xml文件中)

public static void add(Document document)throws Exception{

//首先我们来创建一个学生节点对象

Element newStu=DocumentHelper.createElement("学生");

Element newStu_name=DocumentHelper.createElement("名字");

//如何给元素添加属性

newStu_name.addAttribute("别名""");

newStu_name.setText("宋江");

Element newStu_age=DocumentHelper.createElement("年龄");

Element newStu_intro=DocumentHelper.createElement("介绍");

//把三个子元素(节点)加到newStu

newStu.add(newStu_name);

newStu.add(newStu_age);

newStu.add(newStu_intro);

//newStu节点加到根元素

document.getRootElement().add(newStu);

//直接输出会出现中文乱码

OutputFormat output=OutputFormat.createPrettyPrint();

output.setEncoding("utf-8");

//xml文件更新

XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/four/myclasses3.xml")),output);

//XMLWriter writer = new XMLWriter(new FileWriter( "src/four/myclasses3.xml" ),output);

writer.write(document);

writer.close();

}

//如何指定读取某个元素(要求:读取第一个学生的信息)

public static void read(Document document){

//得到根元素

Element root=document.getRootElement();

//root.elements("学生"):表示取出root元素下的所有学生元素

//root.elements("学生").get(0):表示取出root元素的第一个学生元素

Element stu=(Element) root.elements("学生").get(0);

Element stu_name=stu.element("名字");

System.out.println(stu_name.getText()+"  别名:"+stu_name.attributeValue("别名"));

System.out.println(stu.element("名字").getText());

System.out.println(((Element)stu.elements("名字").get(0)).getText());

}

//遍历我们的xml文件

public static void list(Element element){

System.out.println(element.getName()+"   "+element.getTextTrim());

Iterator iterator=element.elementIterator();

while(iterator.hasNext()){

Element e=(Element)iterator.next();

//递归

list(e);

}

}

 

}


Xml:

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

 

<班级> 

  <学生> 

    <名字 别名2="okok">宋江</名字>  

    <年龄>53</年龄>  

    <介绍>是一个好学生</介绍> 

  </学生>  

  <学生> 

    <名字 别名="okok" 别名2="okok">卢俊义</名字>  

    <年龄>73</年龄>  

    <介绍>ttt</介绍> 

  </学生>  

  <学生>林冲</学生>  

  <学生> 

    <名字 别名="okok" 别名2="okok">武松</名字>  

    <年龄>73</年龄>  

    <介绍>ttt</介绍> 

  </学生>  

  <学生> 

    <名字 别名="">宋江</名字>  

    <年龄/>  

    <介绍/> 

  </学生>  

  <学生> 

    <名字 别名="">宋江</名字>  

    <年龄/>  

    <介绍/> 

  </学生> 

</班级>


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值