您的位置:首页 > 其它

韩顺平XML学习6

2016-03-07 16:13 169 查看
dom4j(jdom)

为什么有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 {

/**

* 演示使用dom4j对xml文件进行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</介绍>

</学生>

<学生>

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

<年龄/>

<介绍/>

</学生>

<学生>

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

<年龄/>

<介绍/>

</学生>

</班级>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: