韩顺平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</介绍>
</学生>
<学生>
<名字 别名="江">宋江</名字>
<年龄/>
<介绍/>
</学生>
<学生>
<名字 别名="江">宋江</名字>
<年龄/>
<介绍/>
</学生>
</班级>
为什么有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</介绍>
</学生>
<学生>
<名字 别名="江">宋江</名字>
<年龄/>
<介绍/>
</学生>
<学生>
<名字 别名="江">宋江</名字>
<年龄/>
<介绍/>
</学生>
</班级>
相关文章推荐
- iOS WebSocket详解
- cordova--第一次实践
- openedxda
- 如何在ubuntu 12.04安装eclipse
- 利用IDA6.6进行apk dex代码动态调试
- android布局大全
- java设计模式——工厂模式
- CentOS6.5 Django1.8.7之安装篇(1)
- 能否利用陀螺仪和加速度计,计算位移?
- 华为S5700怎么划分VLAN? S5700交换机配置VLAN的方法
- 某集网将我的信息给了谁?还是不良卖家不想卖东西
- Unity插件之Editor Console Pro
- 【SGU438】The Glorious Karlutka River =) 分层图最大流
- pdo的使用操作1
- 本地升级的步骤
- Leet Code OJ 326. Power of Three [Difficulty: Easy]
- python闭包学习
- 软件测试 一个让我印象深刻的错误
- c#---传址
- NETBIOS名 和 Host名的不同