dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了

做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不准确,也会导致多个同名的方法理解和用法不同

XML:

<?xml version="1.0" encoding="utf-8"?>
<students>
<student age="25">
<name>张三</name>
<college>信息学院</college>
<telphone>13610262187</telphone>
<notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
</student>
<student >
<name>李四</name>
<college leader="leader">PC学院</college>
<telphone>13610262187</telphone>
<notes>男,1983年生,硕士,现就读于中国农业大学</notes>
</student> </students>

使用dom4j进行增、删、查、改、保存更新(不想对原文件进行操作,所以输出到另一个文件中,看更新后的内容)

代码如下:

package d0620;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List; import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.w3c.dom.NodeList; /*
* 使用Dom4j解析XML文档
*/
public class StudentDom4j {
private Document document;
public void getDom(File file){
// 创建SAXReader creates a DOM4J tree from SAX parsing events. 创建SAX解析器
SAXReader sax=new SAXReader();
try {
// 生成DOM树
document=sax.read(file);
} catch (DocumentException e) {
e.printStackTrace();
} } // 读取student.xml文件中的信息
public void showXML(File file){
// 获取XML的根节点
Element root=document.getRootElement();
System.out.println("Root:"+root.getName()); //获取所有子元素
List<Element> childlist=root.elements();
System.out.println("total child count:"+childlist.size()); //获取特定名称的子元素
List<Element> student=root.elements("student");
System.out.println(student.size());
for(Iterator it=student.iterator();it.hasNext();){
Element studentele=(Element)it.next();
String age=studentele.attributeValue("age");
if(age!=null){
System.out.println("<"+studentele.getName()+" "+"age="+studentele.attributeValue("age")+">");
}else{
System.out.println("<"+studentele.getName()+">");
} //取name的文本
List<Element> names=studentele.elements("name");
for(Iterator nameit=names.iterator();nameit.hasNext();){
Element name=(Element)nameit.next();
System.out.println("\t"+"name="+name.getText());
}
//取college的文本值
List<Element> colleges=studentele.elements("college");
for(Iterator collegeit=colleges.iterator();collegeit.hasNext();){
Element college=(Element)collegeit.next();
//判断有没有属性,如果有就取属性值isTextOnly()如果这个元素只有文本内容则返回true String leader=college.attributeValue("leader");
String text=college.getText();
if(leader!=null){
System.out.println("\t"+college.getName()+" "+"leader="+leader);
}else{
System.out.println("\t"+"college:"+college.getText());
} }
//获取telphone文本值
List<Element> tel=studentele.elements("telphone");
for(Iterator telit=tel.iterator();telit.hasNext();){
Element telele=(Element) telit.next();
System.out.println("\t"+"telphone:"+telele.getText());
} //获取notes文本值
List<Element> notes=studentele.elements("notes");
for(Iterator noteit=notes.iterator();noteit.hasNext();){
Element noteele=(Element) noteit.next();
System.out.println("\tnoteele:"+noteele.getText());
}
} }
// 保存
public void saveXML(File tofile){
// 以XML格式输出createPrettyPrint()创建默认的打印格式
OutputFormat of=OutputFormat.createPrettyPrint();
// 设置编码
of.setEncoding("utf-8");
try {
// 以XML格式输出到dom4j.xml中
XMLWriter writer=new XMLWriter(new FileOutputStream(tofile),of);
// 把源树DOM树输出写进dom4j.xml中
writer.write(document);
writer.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 修改XML元素
public void updateEle(){
//先要获取到age
//得到根元素
Element root=document.getRootElement();
//得到 student元素
List<Element> students=root.elements("student");
// 修改<student age="25">的age属性为22
for(Iterator stuit=students.iterator();stuit.hasNext();){
Element stu=(Element) stuit.next();
String age=stu.attributeValue("age");
if(age!=null){
//就是要替换的,修改属性值
stu.attribute("age").setText("22");
}
// 修改<name>李四</name> 的name文本为sb
List<Element> names=stu.elements("name");
for(Iterator name=names.iterator();name.hasNext();){
Element nameele=(Element) name.next();
String nametext=nameele.getText();
if(nametext.equals("李四")){
//替换
nameele.setText("sb");
}
}
// 修改<college leader="leader">的leader值为否
List<Element> colleges=stu.elements("college");
for(Iterator collegeit=colleges.iterator();collegeit.hasNext();){
Element college=(Element) collegeit.next();
String leader=college.attributeValue("leader");
if(leader!=null){
//替换
college.attribute("leader").setText("否");
}
}
}
} // 新增元素
public void addEle(){
/* <student >
<name>杜和雨</name>
<college leader="leader">PC学院</college>
</student>*/
// 创建根节点
Element root=document.getRootElement();
// 创建student标签
Element student=root.addElement("student");
//创建student子标签name
Element name=student.addElement("name");
//给name添加文本
name.setText("杜和雨");
//创建student的子标签college
Element college=student.addElement("college");
//给college添加文本值
college.addAttribute("leader", "big boss"); }
// 删除元素
public void deleteEle(){
/* <student >
<name>李四</name>
<college leader="leader">PC学院</college>
<telphone>13610262187</telphone>
<notes>男,1983年生,硕士,现就读于中国农业大学</notes>
</student>*/ //得到 根节点
Element root=document.getRootElement();
//找到 student节点
List<Element> students=root.elements();
//删除第1个student节点的所有子节点
//students.remove(0); //删除college的属性leader
for(Iterator<Element> stuit=students.iterator();stuit.hasNext();){
Element stu=stuit.next();
List<Element> colleges=stu.elements();
for(Iterator<Element> collit=colleges.iterator();collit.hasNext();){
Element coll=collit.next();
String leader=coll.attributeValue("leader");
if(leader!=null){
coll.remove(coll.attribute("leader"));
}
}
} } // 主函数,测试
public static void main(String[] args){
StudentDom4j sd=new StudentDom4j();
File file=new File("student.xml");
File tofile=new File("dom4j_student.xml");
sd.getDom(file);
sd.showXML(file);
sd.updateEle();
sd.addEle();
sd.deleteEle();
sd.saveXML(tofile);
} }

常用的方法真的要熟悉才行!!!!

使用dom4j解析XML文档的更多相关文章

  1. DOM4J解析XML文档

    Tip:DOM4J解析XML文档 Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM的人分离出来而后独立开发的.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j ...

  2. 使用DOM4J解析XML文档,以及使用XPath提取XML文档

    使用DOM4J解析XML文档 需要首先下载DOM4J工具包.这是个第三方工具包 在使用DOM4J解析的时候需要导入 DOM4J的JAR包 下载DOM4J工具包->在MyEclipse中新建lib ...

  3. 源生API解析XML文档与dom4j解析XML文档

    一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...

  4. javaweb dom4j解析xml文档

    1.什么是dom4j dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它 ...

  5. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

  6. dom4j解析xml文档全面介绍

    一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...

  7. dom4j解析xml文档&保存数据的乱码问题

    package itcast.dom4j; import java.io.File; import java.io.FileOutputStream; import java.io.FileWrite ...

  8. XML案例(使用DOM4J解析XML文档)

    1.Demo1.java package cn.itcast.dom4j; import java.io.File;import java.io.FileOutputStream;import jav ...

  9. Strus2第一次课:dom4j解析xml文档

    xml文本标记语言: 常用于交换数据:独立于操作系统.编程语言数据存储:xml数据配置:灵活性强,可读性高可以使用css样式改变xml样式 xml解析技术:dom解析xml技术: sax解析xml技术 ...

随机推荐

  1. 突破自我,开源NetWorkSocket通讯组件

    前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经过一些时间的思考,决定将NetworkSoc ...

  2. Matlab绘图详解

    Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外,M ...

  3. MEF

    详情见链接:http://www.cnblogs.com/comsokey/p/MEF1.html#top

  4. MVC 中的 ispostback

    总之呢就是在MVC中试下 ispostback那种效果, 环境就是:登录验证loinger, if (Request.HttpMethod == "POST"){} 没理解透彻 源 ...

  5. there is issue about change event of checkbox in the ie8 oe ie7

    some people said the change event of checkbox can not trigger in the ie7 or ie8,that's not true. thi ...

  6. jq 修改input 标签的值

    <input type="number" id="output" placeholder="0" /> jq使用方法 $('#o ...

  7. ListView适配器获取布局文件作为View的三种方式

    第一种方法: public View getView(int position, View convertView, ViewGroup parent) { View view = null; if ...

  8. Oracle 死锁的检测查询及处理

    来源于: http://www.cnblogs.com/hoojo/archive/2012/08/31/2665583.html -- 死锁查询语句 SELECT bs.username " ...

  9. 如何使用国内源部署Ceph?

    由于网络方面的原因,Ceph的部署经常受到干扰,通常为了加速部署,基本上大家都是将Ceph的源同步到本地进行安装.根据Ceph中国社区的统计,当前已经有国内的网站定期将Ceph安装源同步,极大的方便了 ...

  10. iOS开发小技巧--学会包装控件(有些view的位置由于代码或系统原因,位置或者尺寸不容易修改或者容易受外界影响)

    一.百思项目中遇到了两处这样的问题, 第一处 - 是评论界面的headerView,由于直接把自己搞的xib加载了放在了那里,xib中setFrame写了好多-=  +=,每次滚动的时候,会频繁调用x ...