java中用dom4j对xml文件进行操作

来源:互联网 发布:网络大电影招商案 编辑:程序博客网 时间:2024/05/16 05:59

dom4j的增删改查(简单例子)

1.dom4j的jar包:

在用dom4j之前需要先导入dom4j的jar包,我用的是dom4j-1.6.1这个版本的。

2.首先利用dom4j创建一个xml文件:

package lili;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;public class Dome1 {public static void main(String[] args) throws Exception {String fileName = "Person.xml";createNewXml(fileName);}public static void createNewXml(String fileName) {// 创建文档对象Document document = DocumentHelper.createDocument();// 添加一个根结点<span style="white-space:pre"></span>Element root = document.addElement("root");<span style="white-space:pre"></span>//在根结点下加入新的person结点<span style="white-space:pre"></span>Element Person = root.addElement("Person");// 添加属性及属性值Person.addAttribute("id", "7");// 在根结点下加入一个name的结点Element name = Person.addElement("name");// 设置结点的内容name.setText("小明");Element sex = Person.addElement("sex");sex.setText("女");Element age = Person.addElement("age");age.setText("3");try {// 对xml的读入都需要进行该操作,将缓存的数据写入到文件中File file = new File(fileName);FileOutputStream fos = new FileOutputStream(file);// 创建美化文档的format对象,如果没有这个对象,生成的XML文档的元素不会换行,不太美观OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter xmlWriter = new XMLWriter(fos, format);xmlWriter.write(document);xmlWriter.close();} catch (IOException e) {e.printStackTrace();}}}

创建的Person.xml

<?xml version="1.0" encoding="UTF-8"?><root>  <Person id="7">    <name>小明</name>    <sex>女</sex>    <age>3</age>  </Person></root>

3.增加数据:

public static void addNewElement(String fileName) throws DocumentException {// 获取解析器SAXReader reader = new SAXReader();File file = new File(fileName);// 获取文件对象Document dom = reader.read(file);// 获取根结点Element root = dom.getRootElement();// 添加新元素Element person = root.addElement("Person");// 给新元素添加属性及属性值person.addAttribute("id", "8");// 在新元素下加入一个标签(结点)Element name = person.addElement("name");name.setText("小红");Element sex = person.addElement("sex");sex.setText("男");Element age = person.addElement("age");age.setText("3");try {// 对xml的读入都需要进行该操作,将缓存的数据写入到文件中FileOutputStream fos = new FileOutputStream(file);// 创建美化文档的format对象,如果没有这个对象,生成的XML文档的元素不会换行,不太美观OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter xmlWriter = new XMLWriter(fos, format);xmlWriter.write(dom);xmlWriter.close();} catch (IOException e) {e.printStackTrace();}}


添加后结果:


<?xml version="1.0" encoding="UTF-8"?><root>   <Person id="7">     <name>小明</name>      <sex>女</sex>      <age>3</age>   </Person>    <Person id="8">    <name>小红</name>    <sex>男</sex>    <age>3</age>  </Person></root>

4.删除数据:

在上图的基础上删除数据
public static void deleteElement(String fileName) throws DocumentException {SAXReader reader = new SAXReader();File file = new File(fileName);// 获取文件对象Document dom = reader.read(file);// 获取根结点Element root = dom.getRootElement();// 以删除person为小红的年龄为例// 由于有多个Person结点,所以用个列表保存所有结点为Person的结点List<Element> list = root.elements("Person");// List<Element> list = root.elements(); 则是获取所有结点,不只是Person的结点Element Person = null;for (int i = 0; i < list.size(); i++) {Person = list.get(i);if (Person.attributeValue("id").equals("8")) {// 移除一个结点需要用它的父结点调用remove方法Element age = Person.element("age");Person.remove(age);}}try {// 对xml的读入都需要进行该操作,将缓存的数据写入到文件中FileOutputStream fos = new FileOutputStream(file);// 创建美化文档的format对象,如果没有这个对象,生成的XML文档的元素不会换行,不太美观OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter xmlWriter = new XMLWriter(fos, format);xmlWriter.write(dom);xmlWriter.close();} catch (IOException e) {e.printStackTrace();}}



删除后结果:

<?xml version="1.0" encoding="UTF-8"?><root>   <Person id="7">     <name>小明</name>      <sex>女</sex>      <age>3</age>   </Person>    <Person id="8">     <name>小红</name>      <sex>男</sex>   </Person> </root>

5.修改数据:

在上面的基础上修改person为小明的年龄为例:

public static void ChangeElement(String fileName) throws DocumentException {SAXReader reader = new SAXReader();File file = new File(fileName);// 获取文件对象Document dom = reader.read(file);// 获取根结点Element root = dom.getRootElement();// 以修改person为小明的年龄为例// 由于有多个Person结点,所以用个列表保存所有结点为Person的结点List<Element> list = root.elements("Person");// List<Element> list = root.elements(); 则是获取所有结点,不只是Person的结点Element Person = null;for (int i = 0; i < list.size(); i++) {Person = list.get(i);if (Person.attributeValue("id").equals("7")) {Element age = Person.element("age");age.setText("4");}}try {// 对xml的读入都需要进行该操作,将缓存的数据写入到文件中FileOutputStream fos = new FileOutputStream(file);// 创建美化文档的format对象,如果没有这个对象,生成的XML文档的元素不会换行,不太美观OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter xmlWriter = new XMLWriter(fos, format);xmlWriter.write(dom);xmlWriter.close();} catch (IOException e) {e.printStackTrace();}}


修改后结果:

<?xml version="1.0" encoding="UTF-8"?><root>   <Person id="7">     <name>小明</name>      <sex>女</sex>      <age>4</age>   </Person>    <Person id="8">     <name>小红</name>      <sex>男</sex>   </Person> </root>


6.查找数据:

以上面修改后的结果为例子 查找其中name为小红的性别:
public static void main(String[] args) throws Exception {String fileName = "Person.xml";createNewXml(fileName);addNewElement(fileName);deleteElement(fileName);ChangeElement(fileName);String sex = findSexByName(fileName, "小红");System.out.println("小红性别: " + sex);}public static String findSexByName(String fileName, String nameString)throws DocumentException {String sex = "未找到";SAXReader reader = new SAXReader();File file = new File(fileName);// 获取文件对象Document dom = reader.read(file);// 获取根结点Element root = dom.getRootElement();// 由于有多个Person结点,所以用个列表保存所有结点为Person的结点List<Element> list = root.elements("Person");// List<Element> list = root.elements(); 则是获取所有结点,不只是Person的结点Element Person = null;for (int i = 0; i < list.size(); i++) {Person = list.get(i);Element nameElement = Person.element("name");String nameString2 = nameElement.getText();if (nameString2.equals(nameString)) {Element sexElement = Person.element("sex");sex = sexElement.getText();break;}}return sex;}}

查找结果:

小红性别: 男



0 0
原创粉丝点击