首页 > 学院 > 开发设计 > 正文

dom4j解析xml文件基本操作

2019-11-08 01:00:14
字体:
来源:转载
供稿:网友

概述

dom4j解析xml 包括:查询、添加、修改、删除、获取属性值 写了一个针对dom4j的工具类,减少代码量 注:dom4j不是javase的一部分,需要导入jar文件 代码每一行都有注释

xml文件

<?xml version="1.0" encoding="UTF-8"?><person> <p1 id="1111"> <name>AAA</name> <age>11</age> </p1> <p1> <name>BBB</name> <age>99</age> </p1> </person>

java代码

package xxy.test.dom4j;import java.io.FileOutputStream;import java.io.IOException;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 xxy.dom4j.util.dom3jUtil;/** * @author 许湘扬 2017-2-21 * @说明 dom4j解析xml 包括:查询、添加、修改、删除、获取属性值 */public class testDom4j { public static void main(String[] args) throws DocumentException, IOException { //selectName(); //查询xml中所有name元素的值 //selectOneName(); //查询xml中一个name元素的值 //addSex(); //给第一个name元素添加一个<sex>标签 //addSchoolBetweenNameAndAge();//在第一个p1标签下的<name>和<age>之间添加<school>标签 //modify(); //修改第一个p1下面的age元素的值</age>30</age> //remove(); //删除第一个p1标签下的<name>和<age>之间添加<school>标签 //getAttribute(); //获得第一个p1里面的属性ID的值 } //查询xml中所有name元素的值 public static void selectName() throws DocumentException { //1、创建解析器 SAXReader read=new SAXReader(); //2、得到document Document document=read.read("src/p1.xml"); //3、得到根节点 Element root=document.getRootElement(); //4、得到<p1>标签 List<Element> list=root.elements("p1"); //5、得到p1标签下的name for (Element element : list) { //得到每一个p1下面的name元素上 Element name1=element.element("name"); //6、得到name里面的值 String s=name1.getText(); System.out.PRintln(s); } } //查询xml中一个name元素的值 public static void selectOneName() throws DocumentException { //1、创建解析器 SAXReader read=new SAXReader(); //2、得到document Document document=read.read("src/p1.xml"); //3、得到根节点 Element root=document.getRootElement(); //4、得到第一个<p1>标签 Element p1=root.element("p1"); //5、得到第一个name标签 Element name1=p1.element("name"); //6、得到name的值 System.out.println(name1.getText()); } //给第一个name元素添加一个<sex>标签 public static void addSex() throws DocumentException, IOException { //1、创建解析器 SAXReader read=new SAXReader(); //2、得到document Document document=read.read("src/p1.xml"); //Document document=dom3jUtil.getDocument(dom3jUtil.PATH);//自己封装的工具类 //3、得到根节点 Element root=document.getRootElement(); //4、得到第一个<p1>标签 Element p1=root.element("p1"); //5、先在p1下面直接添加元素 Element sex1=p1.addElement("sex"); //6、在sex下面添加文本 sex1.setText("nv"); //7、回写xml OutputFormat format=OutputFormat.createPrettyPrint();//可以有缩进效果 //OutputFormat format=OutputFormat.createCompactFormat();//全部变成一行 XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("src/p1.xml"),format); xmlWriter.write(document); xmlWriter.close(); //dom3jUtil.backWriter("src/p1.xml", document);//或用自己封装的工具类 } //在第一个p1标签下的<name>和<age>之间添加<school>标签 public static void addSchoolBetweenNameAndAge() throws DocumentException, IOException { //1、创建解析器 SAXReader read=new SAXReader(); //2、得到document Document document=read.read("src/p1.xml"); //3、得到根节点 Element root=document.getRootElement(); //4、得到第一个<p1>标签 Element p1=root.element("p1"); //5、获得p1的所有子元素 List<Element> list=p1.elements(); //6、创建school标签 Element school=DocumentHelper.createElement("school"); school.setText("CQUPT"); //7、在指定位置添加 list.add(1, school); //8、回写 OutputFormat format=OutputFormat.createPrettyPrint();//可以有缩进效果 //OutputFormat format=OutputFormat.createCompactFormat();//全部变成一行 XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("src/p1.xml"),format); xmlWriter.write(document); xmlWriter.close(); } //修改第一个p1下面的age元素的值</age>30</age> public static void modify() { //1、得到document Document document=dom3jUtil.getDocument(dom3jUtil.PATH); //2、得到root节点 Element root=document.getRootElement(); //3、得到第一个p1标签 Element p1=root.element("p1"); //4、得到第一个p1的age标签 Element age1=p1.element("age"); //5、修改age的值 age1.setText("909"); //6、回写 dom3jUtil.backWriter(dom3jUtil.PATH, document); } //删除第一个p1标签下的<name>和<age>之间添加<school>标签 public static void remove() { //1、得到document Document document=dom3jUtil.getDocument(dom3jUtil.PATH); //2、得到root节点 Element root=document.getRootElement(); //3、得到第一个p1标签 Element p1=root.element("p1"); //4、得到school标签 Element school=p1.element("school"); //5、用p1删除school标签 p1.remove(school); //6、回写 dom3jUtil.backWriter(dom3jUtil.PATH, document); } //获得第一个p1里面的属性ID的值 public static void getAttribute() { //1、得到document Document document=dom3jUtil.getDocument(dom3jUtil.PATH); //2、得到root节点 Element root=document.getRootElement(); //3、得到第一个p1标签 Element p1=root.element("p1"); //4、打印输出属性ID的值 System.out.println(p1.attributeValue("id")); }}

工具类代码

package xxy.dom4j.util;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;/** * @author 许湘扬 2017-2-21 * @邮箱 547139255@QQ.com * @说明 dom4j工具类,封装一些方法 */public class dom3jUtil{ public static final String PATH="src/p1.xml"; /* *返回document对象 */ public static Document getDocument(String path) { //1、创建解析器 SAXReader read=new SAXReader(); //2、得到document try { Document document=read.read(path); return document; } catch (DocumentException e) { System.out.println("文件读取异常");; } return null; } /* * 封装回写 */ public static void backWriter(String path,Document document) { OutputFormat format=OutputFormat.createPrettyPrint();//可以有缩进效果 //OutputFormat format=OutputFormat.createCompactFormat();//全部变成一行 XMLWriter xmlWriter; try { xmlWriter = new XMLWriter(new FileOutputStream(path),format); xmlWriter.write(document); xmlWriter.close(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

补充 Xpath

package xxy.test.Xpath;import java.util.List;import org.dom4j.Document;import org.dom4j.Node;import xxy.dom4j.util.dom3jUtil;/** * @author 许湘扬 2017-2-21 * @邮箱 547139255@qq.com * @说明 使用Xpath */public class TestXpath { public static void main(String[] args) { //selectAllName(); //selectFName(); } //选择所有的name标签 public static void selectAllName() { Document document=dom3jUtil.getDocument(dom3jUtil.PATH); //使用document.selectNodes("//name");获得 List<Node> list=document.selectNodes("//name"); for (Node node : list) { System.out.println(node.getText()); } } //获取第一个p1下面的name的值 public static void selectFName() { Document document=dom3jUtil.getDocument(dom3jUtil.PATH); //使用document.selectSingleNode("");获得 Node name=document.selectSingleNode("//p1[@id='1111']/name"); System.out.println(name.getText()); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表