不同的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();
}
} |