用DOM4J解析XML文件

不同的xml文档模型在某一方面都有优势,但从综合整体性能上来说xpp是最佳选择;在不要求实体,PI或者注释的中间件应用时,XPP是一个很好的选择,尤其是在内存有限和applets应用的时候;

 Dom4j虽然速度上不及XPP,但是它却提供了对SAX2,Dom,Xpath的良好支持;

 Xerces DOM性能也不错,只是在处理小文件和Java序列化时表现不优;

JDOM和Crimson DOM的性能不是很好,Crimson DOM在小文件处理上性能较优,但是JDOM的表现却不佳;

具体各项的性能测试,在这里有很详细的分析和比对;http://www.ibm.com/developerworks/xml/library/x-injava/index.html

我根据上课的内容总结了一下Dom4j对xml文件创建,增删改查等,主要是为了自己以后的方便复习和查询;

1. 生成customers.xml文件

package cn.itcast.dom4jreview;

 

import java.io.FileWriter;

import java.io.IOException;

import java.util.ArrayList;

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.XMLWriter;

 

public class CreatDocument {

 

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

              Document document = DocumentHelper.createDocument();

              Element rootElement = document.addElement("customers");

              document.setRootElement(rootElement);

              Element custElement = rootElement.addElement("customer");

              custElement.addAttribute("id", "101");

              custElement.addAttribute("sex", "f");

              Element custName = custElement.addElement("name");

              custName.setText("Tom");

              Element custAge = custElement.addElement("age");

              custAge.setText("25");

              Element custEmail = custElement.addElement("email");

              custEmail.setText("tom@163.com");

             

              Element custElement2 = rootElement.addElement("customer");

              custElement2.addAttribute("id", "102");

              custElement2.addAttribute("sex", "f");

              Element custName2 = custElement2.addElement("name");

              custName2.setText("Jerry");

              Element custAge2 = custElement2.addElement("age");

              custAge2.setText("22");

              Element custEmail2 = custElement2.addElement("email");

              custEmail2.setText("jerry@sohu.com");

             

              OutputFormat format = OutputFormat.createPrettyPrint();

              FileWriter writer = new FileWriter("customers.xml");

              XMLWriter out = new XMLWriter(writer,format);

              out.write(document);

              out.flush();

       }

 

}

 

 

生成的customers.xml文件如下:

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

 

<customers>

  <customer id="101" sex="f">

    <name>Tom</name>

    <age>25</age>

    <email>tom@163.com</email>

  </customer>

  <customer id="102" sex="f">

    <name>Jerry</name>

    <age>22</age>

    <email>jerry@sohu.com</email>

  </customer>

</customers>

 

2.  根据给定属性,查找当前节点的子节点

 

package cn.itcast.dom4jreview;

 

import java.io.File;

import java.util.Iterator;

import java.util.List;

import java.util.Scanner;

 

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

 

public class CustomerSearch {

 

 

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

              System.out.println("please enter the id:");

              Scanner scanner = new Scanner(System.in);

              String str = scanner.next();

             

              File file = new File("customers.xml");

              SAXReader reader = new SAXReader();

              Document doc = reader.read(file);

             

              Element cust = null;

              Boolean flag = false;

             

             

              List<Attribute> nodes = doc.selectNodes("//customers/customer/@id");

              Iterator<Attribute> it = nodes.iterator();

              for(;it.hasNext();){       

                     Attribute attribute =  it.next();

                     String s = attribute.getValue();

                     if(str.equals(s)){                         

                            flag = true;

                            cust = attribute.getParent();                       

                            break;

                     }

              }

             

              if(flag){

                     System.out.println("找到");

                     System.out.println("name:"+cust.getName()+"        sex:"+cust.attributeValue("sex"));                

              }else{

                     System.out.println("查无此人!");

              }

       }

 

}

 

3.  查找所有节点中的同一子节点

 

package cn.itcast.dom4jreview;

 

import java.io.File;

import java.util.List;

 

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

 

public class QueryCustomerNames {

 

 

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

              String str = "customers.xml";

              queryCustomerNames(str);

 

       }

      

       private static void queryCustomerNames(String str) throws DocumentException{

              File file = new File(str);

              SAXReader reader = new SAXReader();

              Document doc = reader.read(file);

             

              Element rootElement = doc.getRootElement();

              List elements = rootElement.selectNodes("//customers/customer/name");

       //     System.out.println(elements.size());

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

                     Element element = (Element) elements.get(i);

                     String text = element.getText();

                     System.out.println(text);

              }

       }

 

}

 

4.增加子节点

 

 

package cn.itcast.dom4jreview;

 

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Scanner;

 

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

 

public class InsertCustomer {

 

 

       public static void main(String[] args) throws DocumentException, IOException {

              System.out.println("请输入信息:");

              Scanner scanner = new Scanner(System.in);

      

              System.out.println("请输入用户id:");

              String id = scanner.next();

             

              System.out.println("请输入用户性别:");

              String sex = scanner.next();

             

              System.out.println("请输入用户姓名:");

              String name = scanner.next();

             

              System.out.println("请输入用户年纪:");

              String age = scanner.next();

             

              System.out.println("请输入用户邮箱:");

              String email = scanner.next();

             

              File file = new File("customers.xml");

              SAXReader reader = new SAXReader();

              Document document = reader.read(file);

             

             

              Element rootElement = document.getRootElement();

              Element element = rootElement.addElement("customer");

             

              element.addAttribute("id", id);

              element.addAttribute("sex", sex);

              Element eleName = element.addElement("name");

              eleName.setText(name);

              Element eleAge = element.addElement("age");

              eleAge.setText(age);

             

              Element eleEmail = element.addElement("email");

              eleEmail.setText(email);

             

              OutputFormat format = OutputFormat.createPrettyPrint();

       //     System.out.println(format.getEncoding());

              format.setEncoding("gb2312");

      

              FileWriter fw = new FileWriter("customers.xml");

              XMLWriter out = new XMLWriter(fw,format);

              out.write(document);

             

              out.flush();

             

       }

 

}

 

 

5. 删除子节点

 

package cn.itcast.dom4jreview;

 

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.util.List;

import java.util.Scanner;

 

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

 

public class RemoveCustomer {

 

       public static void main(String[] args) throws DocumentException, IOException {

              System.out.println("请输入需要删除的id号:");

              Scanner scanner = new Scanner(System.in);

              String id = scanner.next();

             

              File file = new File("customers.xml");

              SAXReader reader = new SAXReader();

              Document document = reader.read(file);

              Element cust = null;

              Boolean flag = false;

             

              List<Attribute> attributes = document.selectNodes("//customers/customer/@id");

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

                     Attribute attr = attributes.get(i);

                     if(attr.getValue().equals(id)){

                            cust = attr.getParent();

                            flag = true;

                            break;

                     }

              }

              if(flag){

                     System.out.println("找到此人");

                     Element custParent = cust.getParent();

                     custParent.remove(cust);

              }else{

                     System.out.println("查无此人!请重新运行!");

              }

             

              FileWriter writer = new FileWriter("customers.xml");

              OutputFormat format = OutputFormat.createPrettyPrint();

              XMLWriter out = new XMLWriter(writer,format);

              out.write(document);

              out.flush();

             

       }

 

}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值