dom4j解析xml

概念:

dom4j介绍:
dom4j是一个组织,针对于xml文档解析,提供dom4j解析器
dom4j并不是JavaSE的一部分,所有使用它需要倒入对应的jar包

得到document:
SEXReader reader = new SEXReader();
Document document = reader.read(url);
document的父接口是Node:如果document中的没有找到方法可以上Node中找

*document中的 getRootElement():获取根节点,返回的是Element
*Element是一个接口,它的父接口也是Node
    -Element和Node的常用方法:
    *getParent():获取父节点

    *addElement():添加标签

使用dom4j查询xml 
获取xml中name元素
1、创建解析器
2、得到document
3、getParent()方法得到根节点 
4、得到所有student标签
*element(qName);
-表示获取标签下面的第一个子标签
-qName:标签的名称
*elements(qName);
-表示或取这个标签下面的子标签(孙标签除外)
-qName:标签的名称
*elements();
-表示获取标签下面的所有一层子标签
5、得到name标签
    *element(qName);
-表示获取标签下面的第一个子标签
6、得到name标签中的值

*getText():获取标签文本内容

测试的xml:

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

<person> 
  <student id="hhh"> 
    <name>张三</name>  
    <age>300</age> 
  </student>  
  <student> 
    <name>李四</name>  
    <age>20</age> 
  </student> 
</person>

java代码:

import java.io.FileOutputStream;
import java.util.List;
import java.util.concurrent.ScheduledExecutorService;
import java.util.jar.Attributes.Name;

import javax.swing.RootPaneContainer;

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;

/**
 * 使用dom4j方法解析xml
 * @author My World
 *
 */
public class Dom4j_Text {
	
	public static void main(String[] args) {
		//selectAllName();
		//selectFirstName();
		//addSex();
		//addAgeBefore();
		//updateAge();
		//deleteSchool();
		getAttriburteValue();
	}
	private static void getAttriburteValue() {
		try {
			//创建解析器
			SAXReader reader = new SAXReader();
			//得到document
			Document document = reader.read("src/dom4j/Person.xml");
			//getRootElement()方法得到根节点
			Element root = document.getRootElement();
			//获得第一个student对象
			Element s1 = root.element("student");
			//获得s1属性值
			String value = s1.attributeValue("id");
			System.out.println("第一个student的id属性值:"+ value);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 删除某一个节点
	 */
	private static void deleteSchool() {
		try {
			//创建解析器
			SAXReader reader = new SAXReader();
			//得到document
			Document document = reader.read("src/dom4j/Person.xml");
			//getRootElement()方法得到根节点
			Element root = document.getRootElement();
			//获得第一个student对象
			Element s1 = root.element("student");
			//获得第一个Student的age元素
			Element school =s1.element("school");
			//通过父节点删除目标节点
			s1.remove(school);
			//回写
			OutputFormat outputFormat = OutputFormat.createPrettyPrint();
			XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/dom4j/Person.xml"),outputFormat);
			xmlWriter.write(document);
			xmlWriter.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 修改节点的值
	 */
	private static void updateAge() {
		try {
			//创建解析器
			SAXReader reader = new SAXReader();
			//得到document
			Document document = reader.read("src/dom4j/Person.xml");
			//getRootElement()方法得到根节点
			Element root = document.getRootElement();
			//获得第一个student对象
			Element s1 = root.element("student");
			//获得第一个Student的age元素
			Element age =s1.element("age");
			//修改age的值
			age.setText("300");
			//回写
			OutputFormat outputFormat = OutputFormat.createPrettyPrint();
			XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/dom4j/Person.xml"),outputFormat);
			xmlWriter.write(document);
			xmlWriter.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 在age的后面添加<school>标签
	 */
	private static void addAgeBefore(){
		try {
			//创建解析器
			SAXReader reader = new SAXReader();
			//得到document
			Document document = reader.read("src/dom4j/Person.xml");
			//getRootElement()方法得到根节点
			Element root = document.getRootElement();
			//获取到第一个student
			Element s1 = root.element("student");
			//获取student下面所有的元素
			List<Element> list = s1.elements();
			//在特定的位置添加元素
			//--创建school标签
			Element s = DocumentHelper.createElement("school");
			s.setText("zzu");
			//--在特定位置添加add();
			list.add(1, s);
			//回写xml
			OutputFormat outputFormat = OutputFormat.createPrettyPrint();
			XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/dom4j/Person.xml"),outputFormat);
			xmlWriter.write(document);
			xmlWriter.close();
		} catch (Exception e) {
			
			e.printStackTrace();
		}
	}
	
	private static void selectAllName() {
		/**
		 * 获取xml中name元素
		 * 1、创建解析器
		 * 2、得到document
		 * 3、getRootElement()方法得到根节点 
		 * 4、得到所有student标签
		 * 5、得到name标签
		 * 6、得到name标签中的值
		 */
		
		try {
			//创建解析器
			SAXReader reader = new SAXReader();
			//得到document
			Document document=reader.read("src/dom4j/Person.xml");
			//获取根节点
			Element root = document.getRootElement();
			//获取所有的student标签
			List<Element> list = root.elements();
			//遍历List集合
			for (Element student : list) {
				//得到所有的student标签
				//得到student下的name标签
				Element name= student.element("name");
				//得到name标签中的文本
				String s = name.getText();
				System.out.println(s);
			}
			
		} catch (DocumentException e) {
			
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取第一个student的name
	 */
	private static void selectFirstName() {
		try {
			SAXReader reader = new SAXReader();
			Document document=reader.read("src/dom4j/Person.xml");
			Element root = document.getRootElement();
			Element student = root.element("student");
			Element name = student.element("name");
			String s = name.getText();
			System.out.println(s);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 在第一个student下面添加<sex>nan</sex>
	 */
	private static void addSex() {
		try {
			SAXReader reader = new SAXReader();
			Document document=reader.read("src/dom4j/Person.xml");
			Element root = document.getRootElement();
			Element student = root.element("student");
			Element sex = student.addElement("sex");
			sex.setText("nan");
			OutputFormat outputFormat = OutputFormat.createPrettyPrint();
			XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/dom4j/Person.xml"),outputFormat);
			xmlWriter.write(document);
			xmlWriter.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值