dom4j解析XML是我们开发中常用解析方式,所以话不多说直接上代码:
以下是相应的Java代码
/**
* dom4j 的CRUD
* @author Administrator
*
*/
public class Demo2 {
@Test
// 获取所有的书名文本信息
public void find() throws DocumentException{
// 获取XML解析器
SAXReader reader = new SAXReader();
// 获取XML文档
Document document = reader.read("book.xml");
// 获取XML根节点
Element root = document.getRootElement();
// 根节点下所有子节点 <书>
List<Element> elements = root.elements();
// for(int i=0; i<elements.size(); i++){
// String bookNameText = elements.get(i).element("书名").getText();
// System.out.println(bookNameText);
// }
// 遍历所有相应的子节点
for(Element ele : elements){
Element bookName = ele.element("书名");
String bookNameText = bookName.getText();
System.out.println(bookNameText);
}
}
@Test
// 向第二个<书>节点添加子节点 <特价>20.00元</特价>
public void add() throws Exception{
// 获取XML解析器
SAXReader reader = new SAXReader();
// 获取XML文档
Document document = reader.read("book.xml");
// 获取XML根节点
Element root = document.getRootElement();
// 创建节点信息
Element createElement = DocumentHelper.createElement("特价");
createElement.addText("20.00元");
// 将节点信息添加到XML文档中
List<Element> elements = root.elements();
elements.get(1).add(createElement);
// 输出到 book.xml 中
OutputStream out = new FileOutputStream("book.xml");
XMLWriter writer = new XMLWriter(out);
writer.write(document);
writer.close();
}
@Test
// 将 <特价> 改为16.8元
public void update() throws DocumentException, Exception{
// 获取XML解析器
SAXReader reader = new SAXReader();
// 获取XML文档
Document document = reader.read("book.xml");
// 获取XML根节点
Element root = document.getRootElement();
// 获取要修改的节点
List<Element> elements = root.elements();
Element priceEle = elements.get(1).element("特价");
// 重新设置信息
priceEle.setText("16.8元");
// 写到XML中
OutputStream out = new FileOutputStream("book.xml");
XMLWriter writer = new XMLWriter(out);
writer.write(document);
writer.close();
}
@Test
// 删除指定元素
public void delete() throws Exception{
// 获取XML解析器
SAXReader reader = new SAXReader();
// 获取XML文档
Document document = reader.read("book.xml");
// 获取XML根节点
Element root = document.getRootElement();
// 获取根节点下所有节点
List<Element> elements = root.elements();
Element element = elements.get(2).element("特价");
element.getParent().remove(element);
// System.out.println(element.getName()+ "==="+ element.getText());
// 写到XML中
OutputStream out = new FileOutputStream("book.xml");
XMLWriter writer = new XMLWriter(out);
writer.write(document);
out.close();
}
@Test
// 在指定位置添加 元素
public void addEle() throws Exception{
// 获取XML解析器
SAXReader reader = new SAXReader();
// 获取XML文档
Document document = reader.read("book.xml");
// 获取根节点
Element root = document.getRootElement();
// System.out.println(root.getName());
// 获取根节点下所有的元素
List<Element> elements = root.elements();
// 获取根节点下的第三个子节点
Element element = elements.get(2);
// 子节点下所有的节点
List<Element> elements2 = element.elements();
// 创建节点信息
Element createElement = DocumentHelper.createElement("作者是否在世");
createElement.setText("已经离世");
// 挂载节点,后面节点会依次后移
elements2.add(1, createElement);
// 写到XML中
OutputStream out = new FileOutputStream("book.xml");
XMLWriter writer = new XMLWriter(out);
writer.write(document);
out.close();
}
@Test
// 对属性进行操作
public void attr() throws Exception{
// 获取XML解析器
SAXReader reader = new SAXReader();
// 获取XML文档
Document document = reader.read("book.xml");
// 获取根节点
Element root = document.getRootElement();
// 获取所有子节点
List<Element> elements = root.elements();
// 获取第三个子节点
Element element = elements.get(2);
// 第三个子节点下所有的子节点
List<Element> elements2 = element.elements();
Element book3Ele = elements2.get(0);
// 添加属性信息
// Attribute createAttribute = DocumentHelper.createAttribute(book3Ele, "评价", "值得一看");
// book3Ele.add(createAttribute);
// 修改属性信息
// book3Ele.attribute("评价").setText("不能错过哦");
// 查找属性信息
// Attribute book3Attr = book3Ele.attribute("评价");
// String attrName = book3Attr.getName();
// String attrText = book3Attr.getText();
// System.out.println(attrName+ "====" +attrText);
// 删除属性信息
book3Ele.remove(book3Ele.attribute("评价"));
// 写到XML中
OutputStream out = new FileOutputStream("book.xml");
XMLWriter writer = new XMLWriter(out);
writer.write(document);
out.close();
}
}
对应的XML为:
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书>
<书名>海底两万里</书名>
<作者>儒勒·凡尔纳</作者>
<售价>39.80元</售价>
</书>
<书>
<书名>80天环游地球</书名>
<作者>儒勒·凡尔纳</作者>
<售价>28.00元</售价>
<特价>16.8元</特价>
</书>
<书>
<书名>福尔摩斯探案全集</书名>
<作者>阿瑟·柯南道尔</作者>
<售价>98.80元</售价>
</书>
</书架>
当然如果要使用dom4j 解析XML那么,请务必导入相应的jar包。
dom4j-1.6.1.jar