概述
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());
}
}
本文介绍使用DOM4J库进行XML文件的操作方法,包括查询、添加、修改、删除及获取属性值等实用技巧。
34万+

被折叠的 条评论
为什么被折叠?



