DOM4j解析xml



1、xml文件 myclasses3.xml

<?xml version="1.0" encoding="utf-8"?>

<班级> 
  <学生> 
    <名字 别名="小宋" 别名2="小江">宋江</名字>  
    <年龄>56</年龄>  
    <介绍>精通java</介绍> 
  </学生>  
  <学生> 
    <名字 别名="小卢" 别名2="小义">卢俊义</名字>  
    <年龄>48</年龄>  
    <介绍>精通.Net</介绍> 
  </学生>  
  <学生> 
    <名字 别名="小武" 别名2="小松">武松</名字>  
    <年龄>76</年龄>  
    <介绍>精通PHP</介绍> 
  </学生> 
</班级>

2、解析xml文件

package com.ifly.classpractice.day8_1.dom4j;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Dom4jTest {

	//使用dom4j对xml文件进行crud操作
	public static void main(String[] args) throws Exception {

		//1.得到解析器
		SAXReader saxReader = new SAXReader();
		//2指定解析哪个xml文件
		Document document = saxReader.read(new File("src/com/ifly/classpractice/day8_1/dom4j/myclasses3.xml"));

		//		list(document.getRootElement()); //遍历所有的节点
		//		read(document); //5 指定读取某个元素
		add(document); //4 添加元素
		//		del(document); // 3 删除元素
		//		update(document); // 2 更新元素
		//		addByIndex(document); //1 添加一个元素 
	}

	//添加一个元素到指定位置( 林冲到 卢俊义后,在武松前)

	public static void addByIndex(Document document) throws Exception {

		//创建一个元素
		Element newHero = DocumentHelper.createElement("学生");

		Element new_name = DocumentHelper.createElement("名字");
		new_name.addAttribute("别名1", "小林");
		new_name.addAttribute("别名2", "小冲");
		new_name.setText("林冲");

		Element new_age = DocumentHelper.createElement("年龄");
		new_age.setText("44");

		Element new_introduce = DocumentHelper.createElement("介绍");
		new_introduce.setText("精通C#");

		newHero.add(new_name);
		newHero.add(new_age);
		newHero.add(new_introduce);

		//得到所有学生的list
		List allHeros = document.getRootElement().elements("学生");

		for (int i = 0; i < allHeros.size(); i++) {
			//取出各个人的名
			Element name = ((Element) allHeros.get(i)).element("名字");
			if (name.getText().equals("卢俊义")) {
				//System.out.println("发现 "+i);
				allHeros.add(i + 1, newHero);
				break;
			}
		}

		//allHeros.add(1,newHero);
		//更新
		//直接输出会出现中文乱码:
		OutputFormat output = OutputFormat.createPrettyPrint();
		output.setEncoding("utf-8");//输出的编码utf-8

		//把我们的xml文件更新
		XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/com/ifly/classpractice/day8_1/dom4j/myclasses3.xml")), output);
		writer.write(document);
		writer.close();

	}

	//更新元素(要求把所有学生的年龄+3 ,把所有的别名2都改为 okok)
	public static void update(Document document) throws Exception {

		//得到所有学生的年龄
		List<Element> stus = document.getRootElement().elements("学生");

		for (Element el : stus) {
			//从el中取出年龄
			Element age = el.element("年龄");
			age.setText((Integer.parseInt(age.getText()) + 3) + "");
			Element name = el.element("名字");
			name.addAttribute("别名2", "okok");
		}

		//更新
		//直接输出会出现中文乱码:
		OutputFormat output = OutputFormat.createPrettyPrint();
		output.setEncoding("utf-8");//输出的编码utf-8

		//把我们的xml文件更新
		XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/com/ifly/classpractice/day8_1/dom4j/myclasses3.xml")), output);
		writer.write(document);
		writer.close();

	}

	//删除元素(要求:删除第一个学生)
	public static void del(Document document) throws Exception {

		//找到该元素
		Element stu1 = document.getRootElement().element("学生").element("名字");
		Element stu2 = (Element) document.getRootElement().element("学生").elements("名字").get(0);
		//删除元素 (默认是第一个)
		//stu1.getParent().remove(stu1);

		//删除元素的某个属性
		//stu1.remove(stu1.attribute("别名"));

		//更新xml

		//直接输出会出现中文乱码:
		OutputFormat output = OutputFormat.createPrettyPrint();
		output.setEncoding("utf-8");//输出的编码utf-8

		//把我们的xml文件更新
		XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/com/ifly/classpractice/day8_1/dom4j/myclasses3.xml")), output);
		writer.write(document);
		writer.close();

	}

	//添加元素(要求: 添加一个学生到xml中)

	public static void add(Document docment) throws Exception {

		//首先我们来创建一个学生节点对象 
		Element newStu = DocumentHelper.createElement("学生");
		Element newStu_name = DocumentHelper.createElement("名字");
		//如何给元素添加属性
		newStu_name.addAttribute("别名", "江江");
		newStu_name.setText("宋江");
		Element newStu_age = DocumentHelper.createElement("年龄");
		newStu_age.setText(23 + "");
		Element newStu_intro = DocumentHelper.createElement("介绍");
		newStu_intro.setText("我是宋江");

		//把三个子元素(节点)加到 newStu下
		newStu.add(newStu_name);
		newStu.add(newStu_age);
		newStu.add(newStu_intro);
		//再把newStu节点加到根元素
		docment.getRootElement().add(newStu);

		//直接输出会出现中文乱码:
		OutputFormat output = OutputFormat.createPrettyPrint();
		output.setEncoding("utf-8");//输出的编码utf-8

		//把我们的xml文件更新
		XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/com/ifly/classpractice/day8_1/dom4j/myclasses3.xml")), output);
		writer.write(docment);
		writer.close();

	}

	//如何指定读取某个元素(要求 :读取第一个学生的信息,)
	public static void read(Document docment) {

		//得到根元素
		Element root = docment.getRootElement();
		//root.elements("学生") :表示取出 root元素 下的所有学生元素
		//root.element("学生") :表示取出 root元素 下的第一个学生元素
		//root.elements("学生").get(0) : 表示取出 root元素 下的第一个学生元素
		Element stu = (Element) root.elements("学生").get(0);

		Element stu_name = stu.element("名字");

		System.out.println(stu_name.getText() + "\t别名:\t" + stu_name.attributeValue("别名"));
		//System.out.println(((Element)stu.elements("名字").get(0)).getText());

		//如果使用xpath,取出第一个学生
		Element stu2 = (Element) docment.selectSingleNode("/班级/学生[1]/名字");
		System.out.println(stu2.getText());
	}

	//遍历我们的xml文件
	public static void list(Element element) {

		System.out.println(element.getName() + " : " + element.getTextTrim());

		Iterator iterator = element.elementIterator();

		while (iterator.hasNext()) {

			Element e = (Element) iterator.next();
			//递归
			list(e);
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间辜负了谁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值