package com.sx.dom4j;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.VisitorSupport;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/*************************************************************************/
/*
* 本类作为对Dom4j的学习
* 主要完成对XML文件的创建、删除操作
* 对XML中数据的CRUD操作
* 本次更新可以将XML文件解析成对象数组
* 用到的实体类User已经给出
* 注意,生成的XML文件中有两个admin属性
* 2011.9.24
*/
/*************************************************************************/
public class Dom4j {
//文件保存位置
private static final String PATH = "D:/Temp/dom4j.xml";
private static File file = new File(PATH);
//用户列表
private static ArrayList<User> userList = new ArrayList<User>();
public static void main(String[] args) throws Exception{
//创建目录
mkdir();
//生成XML文件
writeXml();
//解析XML文件,生成对象数组
readXml();
System.out.println("operator success!");
}
/**
* 建立文件
* */
private static void mkdir()
{
File dir = new File("D:/Temp/");
if(!(dir.exists())){
dir.mkdirs();
}
}
/**
* 实现自己的访问者
* */
private static class MyVisitor extends VisitorSupport
{
public static int id;
public static String userName;
public static String password;
public static boolean isAdmin;
public static String tempAdmin;
@Override
public void visit(Attribute attr) {
if("/userTable/user/@admin".equals(attr.getPath())) {
if("true".equals(attr.getValue())) {
isAdmin = true;
} else {
isAdmin = false;
}
}
if("/userTable/user/userName/@admin".equals(attr.getPath())) {
tempAdmin = attr.getValue();
}
//输出测试数据
System.out.println("Attribute : key=" + attr.getPath());
System.out.println("Attribute : value=" + attr.getValue());
}
@Override
public void visit(Element node) {
if("id".equals(node.getName())) {
id = Integer.parseInt(node.getTextTrim());
}
if("userName".equals(node.getName())){
userName = node.getTextTrim();
}
if("password".equals(node.getName())){
password = node.getTextTrim();
}
//输出测试数据
System.out.println("Element : key=" + node.getName());
System.out.println("Element : value=" + node.getTextTrim());
}
}
/**
* 解析XML文件
* */
@SuppressWarnings("unchecked")
private static void readXml() throws Exception {
//SAXReader 生成DOM方式1
SAXReader reader = new SAXReader();
Document document = reader.read(file);
//DOMReader 生成DOM方式2
/*DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document domDocument = db.parse(file);
DOMReader reader = new DOMReader();
Document document = reader.read(domDocument);*/
//得到根元素
Element root = document.getRootElement();
//解析XML并生成User对象放入array list中
Iterator<Element> iterator = root.elementIterator();
while(iterator.hasNext()){
Element users = iterator.next();
if(users.getName().equalsIgnoreCase("user")) {
MyVisitor visitor = new MyVisitor();
users.accept(visitor);
//设置User对象参数
User user = new User();
user.setId(MyVisitor.id);
user.setPassword(MyVisitor.password);
user.setUserName(MyVisitor.userName);
user.setAdmin(MyVisitor.isAdmin);
user.setTempAdmin(MyVisitor.tempAdmin);
//添加User到数组
userList.add(user);
}
}
//显示测试结果
for(User u : userList) {
System.out.println("Id:" + u.getId() + ", UserName:" + u.getUserName() +
", password:" + u.getPassword() + ", isAdmin:" + u.isAdmin() +
", TempAdmin:" + u.getTempAdmin());
}
/*
* 以下为输入的结果
*
Element : key=user
Element : value=
Attribute : key=/userTable/user/@admin
Attribute : value=true
Element : key=id
Element : value=1
Element : key=userName
Element : value=admin
Attribute : key=/userTable/user/userName/@admin
Attribute : value=1
Element : key=password
Element : value=admin
Element : key=user
Element : value=
Attribute : key=/userTable/user/@admin
Attribute : value=false
Element : key=id
Element : value=2
Element : key=userName
Element : value=user
Attribute : key=/userTable/user/userName/@admin
Attribute : value=0
Element : key=password
Element : value=user
Id:1, UserName:admin, password:admin, isAdmin:true, TempAdmin:1
Id:2, UserName:user, password:user, isAdmin:false, TempAdmin:0
operator success!
*/
//使用XPath 查找对象
/*List list = document.selectNodes("/userTable/user");
Iterator iter = list.iterator();
while(iter.hasNext()) {
Element user = (Element)iter.next();
Element id = user.element("id");
id.setText("5");
}*/
//得到子节点,不会自动递归到子子节点
/*Element root = document.getRootElement();
Iterator<Element> iter = root.elementIterator();
while(iter.hasNext()) {
Element element = iter.next();
System.out.println(element.getName());
}*/
//修改属性
/*root.remove(root.attribute("lastUser"));
root.addAttribute("maxUser", "10");*/
/*Attribute lastUser = root.attribute("lastUser");
lastUser.setText("5");*/
//删除所有User元素中的id元素
/*Iterator<Element> iterator = root.elementIterator();
while(iterator.hasNext()){
Element users = iterator.next();
Iterator<Element> iter = users.elementIterator();
while(iter.hasNext()){
Element id = iter.next();
if(id.getName().equals("id")) {
users.remove(id);
}
}
}*/
//用Xpath删除所有User元素中的id元素
/*List ids = document.selectNodes("/userTable/user/id");
Iterator<Element> list = ids.iterator();
while(list.hasNext()){
Element id = list.next();
id.getParent().remove(id);
}*/
//添加一个新的结点
/*Element user3 = root.addElement("user");
Element id = user3.addElement("id");
id.setText("3");
Element userName = user3.addElement("userName");
userName.setText("user3");
Element password = user3.addElement("password");
password.setText("user3");*/
//将生成的XML保存到本地
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
FileOutputStream fos = new FileOutputStream(file);
XMLWriter xmlWriter = new XMLWriter(fos, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
}
/**
* 创建XML文件,生成的XML文件格式如下:
*
* <?xml version="1.0" encoding="UTF-8"?>
*
* <userTable lastUser="1">
* <!--用户表-->
* <user admin="true">
* <id>1</id>
* <userName admin="0">admin</userName>
* <password>admin</password>
* </user>
* <user admin="false">
* <id>2</id>
* <userName admin="0">user</userName>
* <password>user</password>
* </user>
* </userTable>
*
* */
private static void writeXml() throws Exception {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("userTable");
root.addComment("用户表");
root.addAttribute("lastUser", "1");
Element user1 = root.addElement("user");
user1.addAttribute("admin", "true");
Element id = user1.addElement("id");
id.setText("1");
Element userName = user1.addElement("userName");
userName.addAttribute("admin", "1");
userName.setText("admin");
Element password = user1.addElement("password");
password.setText("admin");
Element user2 = root.addElement("user");
user2.addAttribute("admin", "false");
Element id2 = user2.addElement("id");
id2.setText("2");
Element userName2 = user2.addElement("userName");
userName2.addAttribute("admin", "0");
userName2.setText("user");
Element password2 = user2.addElement("password");
password2.setText("user");
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
FileOutputStream fos = new FileOutputStream(file);
XMLWriter xmlWriter = new XMLWriter(fos, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
}
}
//实体类
class User {
private int id;
private String userName;
private String password;
private boolean isAdmin;
private String tempAdmin;
public String getTempAdmin() {
return tempAdmin;
}
public void setTempAdmin(String tempAdmin) {
this.tempAdmin = tempAdmin;
}
public boolean isAdmin() {
return isAdmin;
}
public void setAdmin(boolean isAdmin) {
this.isAdmin = isAdmin;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.VisitorSupport;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/*************************************************************************/
/*
* 本类作为对Dom4j的学习
* 主要完成对XML文件的创建、删除操作
* 对XML中数据的CRUD操作
* 本次更新可以将XML文件解析成对象数组
* 用到的实体类User已经给出
* 注意,生成的XML文件中有两个admin属性
* 2011.9.24
*/
/*************************************************************************/
public class Dom4j {
//文件保存位置
private static final String PATH = "D:/Temp/dom4j.xml";
private static File file = new File(PATH);
//用户列表
private static ArrayList<User> userList = new ArrayList<User>();
public static void main(String[] args) throws Exception{
//创建目录
mkdir();
//生成XML文件
writeXml();
//解析XML文件,生成对象数组
readXml();
System.out.println("operator success!");
}
/**
* 建立文件
* */
private static void mkdir()
{
File dir = new File("D:/Temp/");
if(!(dir.exists())){
dir.mkdirs();
}
}
/**
* 实现自己的访问者
* */
private static class MyVisitor extends VisitorSupport
{
public static int id;
public static String userName;
public static String password;
public static boolean isAdmin;
public static String tempAdmin;
@Override
public void visit(Attribute attr) {
if("/userTable/user/@admin".equals(attr.getPath())) {
if("true".equals(attr.getValue())) {
isAdmin = true;
} else {
isAdmin = false;
}
}
if("/userTable/user/userName/@admin".equals(attr.getPath())) {
tempAdmin = attr.getValue();
}
//输出测试数据
System.out.println("Attribute : key=" + attr.getPath());
System.out.println("Attribute : value=" + attr.getValue());
}
@Override
public void visit(Element node) {
if("id".equals(node.getName())) {
id = Integer.parseInt(node.getTextTrim());
}
if("userName".equals(node.getName())){
userName = node.getTextTrim();
}
if("password".equals(node.getName())){
password = node.getTextTrim();
}
//输出测试数据
System.out.println("Element : key=" + node.getName());
System.out.println("Element : value=" + node.getTextTrim());
}
}
/**
* 解析XML文件
* */
@SuppressWarnings("unchecked")
private static void readXml() throws Exception {
//SAXReader 生成DOM方式1
SAXReader reader = new SAXReader();
Document document = reader.read(file);
//DOMReader 生成DOM方式2
/*DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document domDocument = db.parse(file);
DOMReader reader = new DOMReader();
Document document = reader.read(domDocument);*/
//得到根元素
Element root = document.getRootElement();
//解析XML并生成User对象放入array list中
Iterator<Element> iterator = root.elementIterator();
while(iterator.hasNext()){
Element users = iterator.next();
if(users.getName().equalsIgnoreCase("user")) {
MyVisitor visitor = new MyVisitor();
users.accept(visitor);
//设置User对象参数
User user = new User();
user.setId(MyVisitor.id);
user.setPassword(MyVisitor.password);
user.setUserName(MyVisitor.userName);
user.setAdmin(MyVisitor.isAdmin);
user.setTempAdmin(MyVisitor.tempAdmin);
//添加User到数组
userList.add(user);
}
}
//显示测试结果
for(User u : userList) {
System.out.println("Id:" + u.getId() + ", UserName:" + u.getUserName() +
", password:" + u.getPassword() + ", isAdmin:" + u.isAdmin() +
", TempAdmin:" + u.getTempAdmin());
}
/*
* 以下为输入的结果
*
Element : key=user
Element : value=
Attribute : key=/userTable/user/@admin
Attribute : value=true
Element : key=id
Element : value=1
Element : key=userName
Element : value=admin
Attribute : key=/userTable/user/userName/@admin
Attribute : value=1
Element : key=password
Element : value=admin
Element : key=user
Element : value=
Attribute : key=/userTable/user/@admin
Attribute : value=false
Element : key=id
Element : value=2
Element : key=userName
Element : value=user
Attribute : key=/userTable/user/userName/@admin
Attribute : value=0
Element : key=password
Element : value=user
Id:1, UserName:admin, password:admin, isAdmin:true, TempAdmin:1
Id:2, UserName:user, password:user, isAdmin:false, TempAdmin:0
operator success!
*/
//使用XPath 查找对象
/*List list = document.selectNodes("/userTable/user");
Iterator iter = list.iterator();
while(iter.hasNext()) {
Element user = (Element)iter.next();
Element id = user.element("id");
id.setText("5");
}*/
//得到子节点,不会自动递归到子子节点
/*Element root = document.getRootElement();
Iterator<Element> iter = root.elementIterator();
while(iter.hasNext()) {
Element element = iter.next();
System.out.println(element.getName());
}*/
//修改属性
/*root.remove(root.attribute("lastUser"));
root.addAttribute("maxUser", "10");*/
/*Attribute lastUser = root.attribute("lastUser");
lastUser.setText("5");*/
//删除所有User元素中的id元素
/*Iterator<Element> iterator = root.elementIterator();
while(iterator.hasNext()){
Element users = iterator.next();
Iterator<Element> iter = users.elementIterator();
while(iter.hasNext()){
Element id = iter.next();
if(id.getName().equals("id")) {
users.remove(id);
}
}
}*/
//用Xpath删除所有User元素中的id元素
/*List ids = document.selectNodes("/userTable/user/id");
Iterator<Element> list = ids.iterator();
while(list.hasNext()){
Element id = list.next();
id.getParent().remove(id);
}*/
//添加一个新的结点
/*Element user3 = root.addElement("user");
Element id = user3.addElement("id");
id.setText("3");
Element userName = user3.addElement("userName");
userName.setText("user3");
Element password = user3.addElement("password");
password.setText("user3");*/
//将生成的XML保存到本地
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
FileOutputStream fos = new FileOutputStream(file);
XMLWriter xmlWriter = new XMLWriter(fos, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
}
/**
* 创建XML文件,生成的XML文件格式如下:
*
* <?xml version="1.0" encoding="UTF-8"?>
*
* <userTable lastUser="1">
* <!--用户表-->
* <user admin="true">
* <id>1</id>
* <userName admin="0">admin</userName>
* <password>admin</password>
* </user>
* <user admin="false">
* <id>2</id>
* <userName admin="0">user</userName>
* <password>user</password>
* </user>
* </userTable>
*
* */
private static void writeXml() throws Exception {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("userTable");
root.addComment("用户表");
root.addAttribute("lastUser", "1");
Element user1 = root.addElement("user");
user1.addAttribute("admin", "true");
Element id = user1.addElement("id");
id.setText("1");
Element userName = user1.addElement("userName");
userName.addAttribute("admin", "1");
userName.setText("admin");
Element password = user1.addElement("password");
password.setText("admin");
Element user2 = root.addElement("user");
user2.addAttribute("admin", "false");
Element id2 = user2.addElement("id");
id2.setText("2");
Element userName2 = user2.addElement("userName");
userName2.addAttribute("admin", "0");
userName2.setText("user");
Element password2 = user2.addElement("password");
password2.setText("user");
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
FileOutputStream fos = new FileOutputStream(file);
XMLWriter xmlWriter = new XMLWriter(fos, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
}
}
//实体类
class User {
private int id;
private String userName;
private String password;
private boolean isAdmin;
private String tempAdmin;
public String getTempAdmin() {
return tempAdmin;
}
public void setTempAdmin(String tempAdmin) {
this.tempAdmin = tempAdmin;
}
public boolean isAdmin() {
return isAdmin;
}
public void setAdmin(boolean isAdmin) {
this.isAdmin = isAdmin;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}