1.要解析的book.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张三</作者>
<售价>39.00元</售价>
</书>
<书>
<书名>JavaScript网页开发</书名>
<作者>李四</作者>
<售价>10.00元</售价>
</书>
</书架>
2.业务处理类
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
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.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.DocumentHandler;
/**
* 构造函数进行初始化
* @author Hust_Ma
*
*/
public class Dom4jService {
private SAXReader reader;
private Document dom;
private Element root;
public Dom4jService() throws Exception {
reader = new SAXReader();
dom = reader.read("book.xml");
root = dom.getRootElement();
}
/**
* 将内存操作中的数据回写到硬盘中的文件中
*/
public void save() {
try {
XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),
OutputFormat.createPrettyPrint());
writer.write(dom);
writer.flush();
writer.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void create() {
}
/**
*
* @param bookName 根据书名定位要增加的内容所在Document树下的哪本书
* @param tag 所要添加的标签名
* @param content 在标签tag下的内容
*/
public void add(String bookName, String tag, String content) {
Element tianJia = DocumentHelper.createElement(tag);
tianJia.setText(content);
List<Element> list = root.elements();
Boolean flag = false;
for (Element element : list) {
if (bookName.equals(element.element("书名").getText())) {
if(element.element(tag)!=null && tag.equals(element.element(tag).getName()))
{
return;
}
element.add(tianJia);
flag = true;
}
}
if (!flag) {
return;
}
save();
}
/**
*
* @param bookName 根据书名定位所要删除的标签位于Document树下的哪本书
* @param tag 要删除的标签
*/
public void delete(String bookName, String tag) {
List<Element> list = root.elements();
Boolean flag = false;
for (Element element : list) {
if (element.element(tag)!=null && bookName.equals(element.element("书名").getText())) {
Element eleRemove = element.element(tag);
eleRemove.getParent().remove(eleRemove);
flag = true;
}
}
if (!flag) {
return;
}
save();
}
/**
*
* @param bookName 根据书名定位所要修改的Document树下的哪本书
* @param tag 要修改的标签名
* @param content 要修改的内容
*/
public void update(String bookName, String tag, String content) {
List<Element> list = root.elements();
Boolean flag = false;
for (Element element : list) {
if (element.element(tag)!=null && bookName.equals(element.element("书名").getText())) {
element.element(tag).setText(content);
flag = true;
}
}
if (!flag) {
return;
}
save();
}
/**
*
* 两种方法查询Document树
*/
public void query() {
List<Element> list = root.elements();
for (Element element : list) {
// System.out.println(element.element("书名").getText());
// System.out.println(element.element("作者").getText());
// System.out.println(element.element("售价").getText());
}
System.out.println("----------下面是另一种方法---------------------");
for (Iterator i = root.elementIterator(); i.hasNext();) {
Element element = (Element) i.next();
for (Iterator j = element.elementIterator(); j.hasNext();) {
Element element2 = (Element) j.next();
// System.out.println("Here1");
System.out.println(element2.getText());
}
}
}
}
3.测试
import com.cpsil.utils.Dom4jService;
public class Dom4jTest {
public static void main(String[] args) throws Exception {
Dom4jService service = new Dom4jService();
service.query();
service.add("JavaScript网页开发","特价","10.00元");
service.add("JavaScript网页开发","特价","10.00元");
service.update("JavaScript网页开发", "特价","4.00元");
service.delete("JavaScript网页开发", "作者");
}
}
PS:操作标签一定要注意便签不存在或者标签重复的情况