- package dmo4jTest;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.OutputStream;
- import java.io.UnsupportedEncodingException;
- import java.util.List;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- 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.junit.Test;
- public class DemoDom4j {
- // 利用dom4j解析xml 进行的操作
- @Test
- // 1、得到某个具体的节点内容:得到第二本书的售价
- public void method1() throws Exception {
- // 得到解析器
- SAXReader sa = new SAXReader();
- // 得到dom
- Document d = sa.read("book.xml");
- // 得到根元素
- Element e = d.getRootElement();
- // 得到书的集合 只得到儿子
- List<Element> li = e.elements();
- // 得到书中的标签售价
- Element sj = li.get(1).element("售价");
- // 得到值
- System.out.println(sj.getTextTrim());
- }
- @Test
- // 打印有节点内容
- public void method2() throws Exception {
- SAXReader sr = new SAXReader();
- Document d = sr.read("book.xml");
- // 递归调用
- print(d.getRootElement());
- }
- private void print(Element root) {
- System.out.println(root.getText());
- List<Element> li = root.elements();
- for (Element element : li) {
- print(element);
- }
- }
- @Test
- // 3、修改某个元素节点的主体内容:
- public void method4() throws Exception {
- // 第一本书的售价修改为200
- SAXReader sr = new SAXReader();
- Document d = sr.read("book.xml");
- // 得到根元素
- Element e = d.getRootElement();
- List<Element> li = e.elements("书");
- // 得到书中的售价修改
- li.get(0).element("售价").setText("200RMB");
- // 写入XML
- OutputFormat format = OutputFormat.createPrettyPrint();
- XMLWriter xw = new XMLWriter(new FileOutputStream("book.xml"), format);
- // 每次还要写回Document
- xw.write(d);
- }
- //在第二本书中添加节点,vip价格20;
- @Test
- public void method5() throws Exception {
- SAXReader sr = new SAXReader();
- Document d = sr.read("book.xml");
- //DocumentHelper 才有创建元素节点的方法
- Element e= DocumentHelper.createElement("vip").addText("120");
- //把这个元素添加到书中
- List< Element> li = d.getRootElement().elements("书");
- //在第二本,的第二个位置插入我新的元素
- li.get(1).elements().add(1, e);
- OutputFormat format = OutputFormat.createPrettyPrint();
- XMLWriter xw = new XMLWriter(new FileOutputStream("book.xml"), format);
- // 每次还要写回Document
- xw.write(d);
- }
- @Test
- public void last() throws Exception {
- //删除第一本书的售价
- SAXReader sr = new SAXReader();
- Document d = sr.read("book.xml");
- //得到书这个节点删除儿子
- Element e = d.getRootElement();
- List <Element> li = e.elements("书");
- Element sj= li.get(0).element("作者");
- sj.getParent().remove(sj);
- OutputFormat format = OutputFormat.createPrettyPrint();
- XMLWriter xw = new XMLWriter(new FileOutputStream("book.xml"), format);
- // 每次还要写回Document
- xw.write(d);
- }
- @Test
- // 添加一本书
- public void method() throws Exception {
- // 得到解析器
- SAXReader sa = new SAXReader();
- // 得到dom
- Document d = sa.read("book.xml");
- //
- Document doc = DocumentHelper.createDocument();
- // 添加书节点
- Element book = doc.addElement("书");
- // 书节点添加子节点
- Element bn1 = book.addElement("书名").addText("平凡的世界");
- Element bn2 = book.addElement("作者").addText("路遥");
- Element bn3 = book.addElement("售价").addText("998");
- // 设置属性
- bn1.setAttributeValue("name", "bookname");
- // 把书节点添加书架上。
- d.getRootElement().add(book);
- // 写入XML
- // 根据书名格式写入到XML 2种 一种有空格 ,一种没有
- OutputFormat of = OutputFormat.createCompactFormat();
- try {
- XMLWriter xw = new XMLWriter(new FileOutputStream("book.xml"), of);
- xw.write(d);
- } catch (Exception e) {
- throw new RuntimeException();
- }
- }
- }
dom4j解析xml练习源码
最新推荐文章于 2021-05-26 12:17:14 发布