dom4j是一个组织,针对xml解析,提供解析器dom4j
步骤
1、导入dom4j的jar包
创建文件夹lib,复制jar包到lib下面,右键点击jar:build path-add to buildpath
2、得到document
SAXReader reader = new SAXReader();
Document d = reader.read(url);
document里面的方法:getRootElement():获取根节点,返回Element
Element接口里面的方法:getParent()、addElement()
1、使用dom4j查询xml
查询所有name元素里面的值
a、创建解析器 SAXReader reader = new SAXReader()
b、得到document Document d = reader.read(url)
c、得到根节点 getRootElement(),返回Element
d、得到p1标签
elements(“p1”):获取每个标签下面的第一个首标签,返回list集合
遍历list得到每一个p1
e、得到name 执行element(qname):获取标签下面的第一个子标签,返回Element
f、获取name元素里面的值 getText
g、打印出f步骤
2、使用dom4j创建节点
a、创建解析器
b、得到docuemtn
c、得到根节点
d、得到第一个p1 使用element方法
e、在p1下面添加元素 addElement(“标签名称”),返回Element
f、添加文本 setText(“文本内容”)
g、回写xml XMLWriter xml = new XMLWriter(OutputStrem,OutputFormat)
OutputStrem :xml文件路径:new FileOutPutStream(“文件路径”)
OutputFormat格式化的值,使用createPretttyPrint方法
h、把文件添加进XMLWriter write
i、关闭XMLWriter close
3、在指定位置添加节点
a、创建解析器
b、得到docuemtn
c、得到根节点
d、得到第一个p1 使用element方法
e、获取p1下面的所有元素 elements方法,返回list集合,使用list的方法,在指定位置添加元素 add(int index,E element)
f、创建要添加的元素 documentHelper.createElement
g、创建文本
h、回写xml
i、把文件添加进XMLWriter
l、关闭XMLWriter
对得到document的操作和回写xml的操作,封装成方法;把传递的文件路径封装成一个常量
好处:提高开发速度,可以提高代码可维护性
4、修改节点的值
a、得到document
b、得到根节点,然后得到第一个p1标签
c、得到p1下面的标签
d、修改标签的值 setText
e、回写xml
5、删除节点
a、得到document
b、得到根节点
c、得到第一个p1标签
d、得到p1标签下面的标签
e、使用p1标签删除d remove
f、回写xml
6、使用dom4j获取属性的操作
a、得到document
b、得到根节点
c、得到第一个p1标签
d、得到p1里面的属性值 attributeValue
package cn.idcast1;import java.io.FileOutputStream;import java.io.OutputStreamWriter;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 cn.idcast2.Dom4jUtils;public class Dom4jTest { public static void main(String[] args) throws Exception { // selectAll(); // selectFirst(); // selectSecond(); // add(); // addschool(); // modify(); // remove(); getValue(); } // 获取属性值的操作 public static void getValue() { Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL); Element root = d.getRootElement(); Element p1 = root.element("p1"); String s = p1.attributeValue("id"); System.out.println(s); } // 删除节点 public static void remove() { Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL); Element root = d.getRootElement(); Element p1 = root.element("p1"); Element sch = p1.element("school"); p1.remove(sch); Dom4jUtils.xmlwriters(Dom4jUtils.URL, d); } // 修改节点的值 public static void modify() { Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL); Element root = d.getRootElement(); Element p1 = root.element("p1"); Element name1 = p1.element("name"); name1.setText("张三"); Dom4jUtils.xmlwriters(Dom4jUtils.URL, d); } // 在指定位置添加节点 public static void addschool() throws Exception { Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL); Element root = d.getRootElement(); Element p1 = root.element("p1"); Listlist = p1.elements(); Element school = DocumentHelper.createElement("school"); school.setText("jinshan"); list.add(1, school); Dom4jUtils.xmlwriters(Dom4jUtils.URL, d); } // 创建节点 public static void add() throws Exception { Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL); Element root = d.getRootElement(); Element p1 = root.element("p1"); Element sex = p1.addElement("sex"); sex.setText("nv"); Dom4jUtils.xmlwriters(Dom4jUtils.URL, d); } // 得到第二个name元素里面的值 因为element方法表示的是得到第一个标签的值 public static void selectSecond() throws Exception { Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL); Element root1 = d.getRootElement(); List list = root1.elements("p1"); Element index = list.get(1); Element name1 = index.element("name"); String s = name1.getText(); System.out.println(s); } // 得到第一个name元素里面的值 public static void selectFirst() throws Exception { Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL); Element root1 = d.getRootElement(); Element p1 = root1.element("p1"); Element name1 = p1.element("name"); String s = name1.getText(); System.out.println(s); } // 得到所有的name元素里面的值 public static void selectAll() throws Exception { Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL); Element e = d.getRootElement(); List l = e.elements(); for (Element element : l) { Element e2 = element.element("name"); String s = e2.getText(); System.out.println(s); } }}
封装方法
package cn.idcast2;import java.io.FileOutputStream;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class Dom4jUtils { // 封装文件的地址,因为是常量,所有URL要大写 public static final String URL = "src/2.xml"; // 封装文件,返回Document public static Document getDocuments(String url) { try { SAXReader sax = new SAXReader(); Document d = sax.read(url); return d; } catch (DocumentException e) { e.printStackTrace(); } return null; } // 封装回写的xml public static void xmlwriters(String url, Document d) { try { XMLWriter xmlw = new XMLWriter(new FileOutputStream(url), OutputFormat.createPrettyPrint()); xmlw.write(d); xmlw.close(); } catch (Exception e) { e.printStackTrace(); } }}