天天看点

关于dom4j

jar包下载:https://dom4j.github.io/

具体教程参考文章:https://www.cnblogs.com/sharpest/p/7877501.html

先编写一个xml如下

<?xml version="1.0" encoding="UTF-8"?>
<students>
     <student id="01">
           <name>哇唧唧哇</name>
           <age>8</age>
         </student>
     <student id="02">
           <name>嗷嗷嗷</name>
           <age>4</age>
         </student>
</students>
           

导入dom4j jar包

简单查询:

SAXReader reader = new SAXReader();
    //SAXReader :读取xml文件到Document树结构文件对象
    //创建dom4j的解析器
	Document document = reader.read(new File("student.xml"));
	//通过该解析器读取xml文件
    Element  root  = document.getRootElement();
    //将文件变为root根元素-------1
    for( Iterator iterator = root.elementIterator();iterator.hasNext();) {
      	Element element = (Element) iterator.next();
      //System.out.println(element.getName()); //获得节点: student
      	String id = element.attributeValue("id");//获得id
        String name=  element.elementText("name");//获得name标签(标签内容)
        //将文件变为root根元素-------2
        List<Element> elelist= root.elements();//两个student标签
    	for(Element element:elelist) {
		String id = element.attributeValue("id");
		System.out.println(id);
	}
           

添加节点:

/编写解析器

SAXReader reader = new SAXReader();
	 Document document = reader.read(new File("student.xml"));
	 //获得root
	 Element root = document.getRootElement();
	 Element student =  root.addElement("student").addAttribute("id", "03");
	 student.addElement("name").addText("www");
	 student.addElement("age").addText("20");
	 //定义数据
	// XMLWriter writer = new XMLWriter(new FileWriter(new File("student.xml")));
	 //创建流
	 OutputFormat format = OutputFormat.createPrettyPrint();
	 format.setEncoding("UTF-8");
	 XMLWriter  writer = new XMLWriter(new FileWriter(new File("student.xml")),format);
	 writer.write(document);
	 //关闭流
	 writer.close();
           

删除:dom4j 提供方法可以快速定位到想要的删除的内容

利用xpath

导入:

jaxen-1.1-beta-6.jar

jaxme-api-0.3.jar

jsr173_1.0_api.jar

pull-parser-2.1.10.jar

relaxngDatatype-20030807.jar

xpp3-1.1.3.3.jar

xsdlib-20030807.jar

public static void main(String[] args) throws DocumentException {
	   SAXReader reader = new SAXReader();
		 Document document = reader.read(new File("student.xml"));
		 //获得root
		 Element root = document.getRootElement();
		 Element student = (Element) document.selectSingleNode("//student[@id='03']");
		 student.getParent().remove(student);
		 try {
			show("student.xml",document);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
}

private static void show(String filiePath, Document document) throws IOException {
	 //创建流
	 OutputFormat format = OutputFormat.createPrettyPrint();
	 format.setEncoding("UTF-8");
	 XMLWriter  writer = new XMLWriter(new FileWriter(new File(filiePath)),format);
	 writer.write(document);
	 //关闭流
	 writer.close();
	
}
           

修改:查询到指定的元素,才能进行修改

public static void main(String[] args) throws DocumentException, IOException {
	   SAXReader reader = new SAXReader();
		 Document document = reader.read(new File("student.xml"));
		 Element student = (Element) document.selectSingleNode("//student[@id='02']");
		 student.element("name").addAttribute("type", "dou");
		 student.element("name").setText("11");
		 show("student.xml", document);
		 try {
			show("student.xml",document);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
}

private static void show(String filiePath, Document document) throws IOException {
	 //创建流
	 OutputFormat format = OutputFormat.createPrettyPrint();
	 format.setEncoding("UTF-8");
	 XMLWriter  writer = new XMLWriter(new FileWriter(new File(filiePath)),format);
	 writer.write(document);
	 //关闭流
	 writer.close();
	
}