第一步:引用jar包
dom4j-1.6.1.jar (http://www.dom4j.org/下载最新版)
jaxen-1.1-beta-6.jar (http://jaxen.codehaus.org/ 这是官网,点击下载链接好像不行,可以去csdn)
支持XPath必须的,否则会报错java.lang.NoClassDefFoundError: org/jaxen/JaxenException
第二步:XPath基本语法
http://www.w3school.com.cn/xpath/index.asp
第三步:实例
users.xml
<? xml version="1.0" encoding="UTF-8" ?>
- < Users >
- < User id =" 0 " >
< Name > youchuancong </ Name >
< Age > 23 </ Age >
</ User >
- < User id =" 1 " >
< Name > cindy </ Name >
< Age > 23 </ Age >
</ User >
</ Users >
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class XMLTools {
public void creat(String filename){//创建xml文件
Document document = DocumentHelper.createDocument();
Element usersElement = document.addElement("Users");
Element userElement = usersElement.addElement("User");
userElement.addAttribute("id", "0");
Element nameElement=userElement.addElement("Name");
nameElement.setText("youchuancong");
Element ageElement=userElement.addElement("Age");
ageElement.setText("23");
Element userElement1 = usersElement.addElement("User");
userElement1.addAttribute("id", "1");
Element nameElement1=userElement1.addElement("Name");
nameElement1.setText("cindy");
Element ageElement1=userElement1.addElement("Age");
ageElement1.setText("23");
try{
XMLWriter output = new XMLWriter(
new FileWriter( new File(filename) ));
output.write( document );
output.close();
}
catch(IOException e){System.out.println(e.getMessage());}
}
public void read(String filename,String id) throws Exception{//根据id读出学生姓名
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filename));
Element e = (Element)document.selectSingleNode("/Users/User[@id='"+id+"']");
Element name = e.element("Name");
System.out.println("Name:"+name.getText());
}
public void readName(String filename) throws Exception{//读出所有学生的学生姓名
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filename));
List users = document.selectNodes("//Name");
Iterator it = users.iterator();
while(it.hasNext()){
Element e = (Element)it.next();
System.out.println("Name:"+e.getText());
}
}
public void addUser(String filename,String id,String name,String age) throws Exception{
SAXReader saxReader = new SAXReader();//添加信息
Document document = saxReader.read(new File(filename));
Element e = (Element)document.selectSingleNode("/Users");
// Element e = document.getRootElement();
Element user = e.addElement("User");
user.setAttributeValue("id", id);
user.addElement("Name").setText(name);
user.addElement("Age").setText(age);
XMLWriter output = new XMLWriter(
new FileWriter( new File(filename) ));
output.write( document );
output.close();
}
public void readUser(String filename) throws Exception{//读出所有学生的基本信息
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filename));
List l = document.selectNodes("/Users/User");
Iterator it = l.iterator();
while(it.hasNext()){
Element e = (Element)it.next();
System.out.println("id:"+e.attributeValue("id"));
Element name = e.element("Name");
System.out.println("name:"+name.getText());
Element age = e.element("Age");
System.out.println("age:"+age.getText());
System.out.println("#############################");
}
}
public void delete(String filename,String id) throws Exception{//删除指定id的学生
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filename));
Element e = (Element)document.selectSingleNode("/Users/User[@id='"+id+"']");
if(e!=null){
Element parent = e.getParent();
parent.remove(e);
XMLWriter output = new XMLWriter(
new FileWriter( new File(filename) ));
output.write( document );
output.close();
}
}
public void readAll(String filename) throws Exception{//选取所有节点
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filename));
List users = document.selectNodes("//*");
Iterator it = users.iterator();
while(it.hasNext()){
Element e = (Element)it.next();
System.out.println("ElementName:"+e.getName()+"||value:"+e.getText());
}
}
public void modify(String filename,String id,String name) throws Exception{//修改指定学号的学生姓名
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filename));
Element e = (Element)document.selectSingleNode("/Users/User[@id='"+id+"']");
Element n = e.element("Name");
n.setText(name);
XMLWriter output = new XMLWriter(
new FileWriter( new File(filename) ));
output.write( document );
output.close();
}
}
XMLTest.java
public class XMLTest {
public static void main(String[] args) {
XMLTools xml = new XMLTools();
//xml.creat("users.xml");
try {
//xml.read("users.xml", "0");
//xml.addUser("users.xml", "4", "no", "100");
//xml.readUser("users.xml");
//xml.readName("users.xml");
xml.readAll("users.xml");
//xml.modify("users.xml", "0", "helloworld");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我在调用selectNodes方法的时候,碰到了一些问题,
String xPath = "//extensionPoint[@name='" + extName + "']";
List<Element> eles = doc.selectNodes(xPath);
List<Element> eles = doc.selectNodes(xPath);
上面不加//,得到的eles是一个空的list。如果是根节点可以不加//,这里在w3school有说明的
感谢原博客作者