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);
} }

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

最新文章

  1. gem sources --add http://ruby.taobao.org/
  2. UIAlertView&#39; is deprecated: first deprecated in iOS 9.0 - UIAlertView is deprecated. Use UIAlert
  3. Discuz! 的编码规范
  4. CSS基础(三):选择器
  5. LogNet4学习笔记
  6. .NET C#: NameValueCollection
  7. web开发
  8. HBase-再看HBase
  9. AppStore IAP 客户端校验代码
  10. java命令行运行main时jar及其配置
  11. SQL Server 基础 04 函数与分组查询数据
  12. Android复制WIN8点击下沉倾斜系统瓷砖效果
  13. 【Hdu2089】不要62(数位DP)
  14. 【NOIP模拟赛】总结
  15. SQL Server 创建用户报错:消息 15023,级别 16,状态 1,第 1 行 用户、组或角色 &#39;XXX&#39; 在当前数据库中已存在。
  16. 垂直水平居中总结css
  17. crontab 定时执行python脚本
  18. poj 1753 2965
  19. poj 3463/hdu 1688 求次短路和最短路个数
  20. tail 尾巴

热门文章

  1. Java 基础【08】.class getClass () forName() 详解
  2. Theano2.1.18-基础知识之theano的扩展
  3. SQLServer(MSSQL)、MySQL、SQLite、Access相互迁移转换工具 DB2DB v1.4
  4. .net程序员转行做手游开发经历(一)
  5. 将IList转换为List
  6. IE对象最后一个属性后不要加逗号,否则在IE7及以下版本中会报错
  7. 【转】XSD (xml Schema Definition)
  8. C#套接字和windowsAPI套接字
  9. 计算&amp;IO密集型任务的 优化
  10. git初体验(七)多账户的使用