xml的解析三

使用dom4j查詢xml

dom4j,是一個組織,針對xml解析,提供解析器 dom4j

dom4j不是javase的一部分,需要導入dom4j提供jar包

案例:

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

<person> 
  <p1 id1="aaa"> 
    <name>張三</name>  
    <age>20</age>  
  </p1>  
  <p1 id2="bbb"> 
    <name>李四</name>  
    <age>30</age> 
  </p1>  
  <p1 id3="ccc"> 
    <name>王五</name>  
    <age>40</age> 
  </p1>  
  <p1 id4="ddd"> 
    <name>趙六</name>  
    <age>50</age> 
  </p1> 
</person>
package com.java.xml;

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;

public class TestDom4j {

	public static void main(String[] args) throws DocumentException, IOException {
//		selectName();
//		selectSingle();
//		addSex();
//		addAgeBefore();
//		modifyAge();
//		deleteSchool();
		getValues();
	}
	/**
	 * 獲取第一個p1裏面的屬性id1的值
	 * @throws DocumentException 
	 */
	private static void getValues() throws DocumentException {
		/*
		 * 1.創建解析器
		 * 2.得到document
		 * 3.獲取第一個p1元素
		 * 4.得到p1裏面的屬性值
		 */
		//創建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//獲取第一個p1元素
		Element root = document.getRootElement();
		Element p1 = root.element("p1");
		//得到p1裏面的屬性值
		String str = p1.attributeValue("id1");
		System.out.println(str);
	}
	/**
	 * 刪除第一個p1下面的<school>ecit</school>元素
	 * @throws IOException 
	 * @throws DocumentException 
	 */
	private static void deleteSchool() throws IOException, DocumentException {
		/*
		 * 1.創建解析器
		 * 2.得到document
		 * 3.得到根節點
		 * 4.得到第一個p1元素
		 * 5.得到p1元素下的school元素
		 * 6.使用p1刪除school元素
		 * 7.回寫xml
		 */
		//創建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//得到根節點
		Element root = document.getRootElement();
		//得到第一個p1元素
		Element p1 = root.element("p1");
		//得到school元素
		Element school = p1.element("school");
		//刪除school
		p1.remove(school);
		//回寫xml
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"), format);
		xmlWriter.write(document);
		xmlWriter.close();
	}
	/**
	 * 修改第一個p1下面的age元素的值 <age>30</age>
	 * @throws DocumentException 
	 * @throws IOException 
	 */
	private static void modifyAge() throws DocumentException, IOException {
		/*
		 * 1.創建解析器
		 * 2.得到document
		 * 3.得到根節點
		 * 4.得到第一個p1元素
		 * 5.得到第一個p1元素下面的age元素
		 * 6.修改age的值
		 * 7.回寫xml
		 */
		//創建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//得到根節點
		Element root = document.getRootElement();
		//得到第一個p1
		Element p1 = root.element("p1");
		//得到p1下面的age元素
		Element age = p1.element("age");
		//修改age元素的值
		age.setText("30");
		//回寫xml
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"), format);
		xmlWriter.write(document);
		xmlWriter.close();
	}
	/**
	 * 在第一個p1下面的age標籤之前添加 <school>ecit.edu.cn</schlool>
	 * @throws DocumentException 
	 * @throws IOException 
	 */
	private static void addAgeBefore() throws DocumentException, IOException {
		/*
		 * 1.創建解析器
		 * 2.得到document
		 * 3.獲取根節點
		 * 4.獲取第一個p1
		 * 5.獲取p1下面的所有元素
		 * 		elements方法返回list
		 * 		使用list裏面的方法,在特定位置添加元素
		 * 		創建元素,在元素下面創建文本
		 * 			add(int index, E element)
		 * 			第一個參數是	位置	下標	從0開始
		 * 			第二個參數是	要添加的元素
		 * 6.回寫xml
		 */
		//創建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//獲取根節點
		Element root = document.getRootElement();
		//獲取第一個p1
		Element p1 = root.element("p1");
		//獲取p1下面所遇元素
		List<Element> list = p1.elements();
		//創建元素使用
		Element school = DocumentHelper.createElement("school");
		//在school下面創建文本
		school.setText("石牌小學");
		//在特定位置添加
		list.add(1, school);
		//回寫xml
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"), format);
		xmlWriter.write(document);
		xmlWriter.close();
	}
	/**
	 * 在第一個p1標籤末尾添加一個元素 <sex>nv</sex>
	 * @throws DocumentException 
	 * @throws IOException 
	 */
	private static void addSex() throws DocumentException, IOException {
		/*
		 * 1.創建解析器
		 * 2.得到document
		 * 3.得到根節點
		 * 4.獲取第一個p1
		 * 5.在p1下面添加元素
		 * 6.在添加完成之後的元素下面添加文本
		 * 7.回寫xml
		 */
		//創建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//得到根節點
		Element root = document.getRootElement();
		//獲取第一個p1
		Element p1 = root.element("p1");
		//在p1下面直接添加sex元素
		Element sex = p1.addElement("sex");
		//在sex中添加值
		sex.setText("nv");
		//回寫xml
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"), format);
		xmlWriter.write(document);
		xmlWriter.close();
	}
	/**
	 * 獲取到一個name元素裏面的值
	 * @throws DocumentException 
	 */
	private static void selectSingle() throws DocumentException {
		/*
		 * 1.創建解析器
		 * 2.得到document
		 * 3.得到根節點
		 * 4.得到第一個p1元素
		 * 5.得到p1下面的name元素
		 * 6.得到name元素的值
		 */
		//創建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//得到根節點
		Element root = document.getRootElement();
		//得到第一個p1元素
//		Element p1 = root.element("p1");
		//得到第三個p1元素
		List<Element> list = root.elements("p1");
		Element p1 = list.get(2);
		//得到p1下面的name元素
		Element name = p1.element("name");
		//獲取name元素的值
		String str = name.getText();
		System.out.println(str);
	}
	/**
	 * 查詢xml中所有name元素的值
	 * @throws DocumentException 
	 */
	private static void selectName() throws DocumentException {
		/*
		 * 1.創建解析器
		 * 2.得到document
		 * 3.得到根節點
		 * 4.得到p1
		 * 5.得到p1下面的name元素
		 * 6.得到name元素的值
		 */
		//創建解析器
		SAXReader saxReader = new SAXReader();
		//得到document
		Document document = saxReader.read("src/person.xml");
		//得到根節點
		Element root = document.getRootElement();
		//得到p1
		List<Element> list = root.elements("p1");
		//遍歷list
		for (Element element : list) {
			//element是每一個p1元素,得到p1下面的name元素
			Element name = element.element("name");
			//得到name元素的值
			String str = name.getText();
			System.out.println(str);
		}
	}
	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章