dom4j 解析xml文件 的操作

stu.xml:

<?xml version="1.0"?>
<students>
 <student id='001'>
    <name>zhangsan</name>
    <age>20</age>
 </student>
 <student id='002'>
    <name>李四</name>
    <age>23</age>
    </student>
 <student id="003">
    <name>wangwu</name>
    <age>21</age>

</student> <student id="004"> <name>zhaoliu</name> <age>26</age> </student> <haha>hello,world</haha></students>

 
 

注意:要引入dom4j.jar

类Dom4jDemo:

package day03;

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

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Dom4jDemo {

	/**
	 * @param args
	 * @throws DocumentException 
	 */
	public static void main(String[] args) throws DocumentException {
		// TODO Auto-generated method stub
		//1.获取dom4j中读取xml文档的对象。saxreader
		SAXReader reader=new SAXReader(); 
		 File file=new File("stu.xml");
		 //2.通过读取对象的reader方法,与要操作的xml文档的相关联。
		    //获取该文档的document对象。
		 Document document=reader.read(file);
		System.out.println("document:"+document.getNodeType());
		 //3.通过文档对象document,可以获取根元素节点对象。
		 Element rootElement=document.getRootElement();
		 System.out.println("rootElement:"+rootElement.getNodeType());
		 
		 
		 System.out.println(rootElement.element("student").attribute("id").getNodeType());
		 //4.通过根元素对象就可以对文档的内容进行操作。
		 System.out.println("根="+rootElement.getName());
		 
		 elementDemo(document);
		 System.out.println("获取所有学生");
		 getStuElements(document);
		 System.out.println("取出所有学生的姓名年龄");
		 getStuInfos(document);
		 System.out.println("用elementIterator()取出所有学生的姓名年龄");
		 getStuInfos2(document);
		 System.out.println("获取属性");
		 getAttribute(document);
		 System.out.println("添加一个学生元素:");
		 addStudentElement(document);
		 System.out.println("移除节点");
		 removeNode(document);
		 System.out.println("指定id移除节点");
		 removeById(document,"002");
	}
	/**
	 * 练习二:定义一个方法,接收一个id值。
	 * 将指定id所定义的学生节点删除。
	 * 
	 * 思路:
	 * 1.先获取指定id的学生节点对象。
	 * 2.通过跟元素的remove方法进行移除。
	 * 3.通过asXml方法进行验证。
	 * @param document
	 * @param string
	 */
	private static void removeById(Document document, String id) {
		// TODO Auto-generated method stub
		Element rootElement=document.getRootElement();
		List<Element> list=rootElement.elements("student");
		boolean b=false;
		for(Element e:list){
			if(e.attribute("id").getValue().equals(id)){
				b=true;
				rootElement.remove(e);
				break;
			}
		}
		if(!b){
			System.out.println("NoNoNo");
		}
		

		System.out.println("移除后"+document.asXML());

	}

	/**
	 * 移除节点
	 * 1.属性:004;
	 * 2.移除zhaoliu学生节点。
	 * @param document
	 */
	private static void removeNode(Document document) {
		// TODO Auto-generated method stub
		Element rootElement=document.getRootElement();
		Element stuElement=(Element)rootElement.elements("student").get(3);
		//System.out.println(stuElement.elementText("name"));
		
		/*Attribute idAttribute=stuElement.attribute("id");
		stuElement.remove(idAttribute);
		Element nameElement=stuElement.element("name");
		stuElement.remove(nameElement);*/
		
		rootElement.remove(stuElement);

		System.out.println("移除后"+document.asXML());
		
	}


	/**
	 * 添加一个学生节点。
	 * id=005
	 * name=zhouqi;
	 * age=38
	 */
	public static void addStudentElement(Document document) {
		// TODO Auto-generated method stub
		Element rootElement=document.getRootElement();
		Element stuElement=rootElement.addElement("student");
		/*stuElement.addAttribute("id", "005");
		Element nameElement=stuElement.addElement("name");
		nameElement.addText("zhouqi");
		System.out.println(nameElement.getName());*/
		stuElement.addAttribute("id", "005").addElement("name").addText("zhouqi").addElement("age").addText("38");
		System.out.println(document.asXML());
	}

	
	/**
	 * 获取属性
	 * @param document
	 */
	public static void getAttribute(Document document) {
		// TODO Auto-generated method stub
		Element rootElement=document.getRootElement();
		Iterator<Element> it=rootElement.elementIterator("student");
		while(it.hasNext()){
			Element stuElement=it.next();
			/*Attribute idAtt=stuElement.attribute(0);
			System.out.println(idAtt.getName()+"="+idAtt.getValue());*/
			//2者等价
			System.out.println(stuElement.attributeValue("id"));
		}
	}

	/**
	 * 练习一:取出所有学生的姓名年龄。
	 * 要求:用elementIterator();
	 * @param document
	 */
	public static void getStuInfos2(Document document) {
		// TODO Auto-generated method stub
		Element rootElement=document.getRootElement();
		for(Iterator i=rootElement.elementIterator("student");i.hasNext();){
			Element stuElement=(Element)i.next();
			Element nameElement=stuElement.element("name");
			Element ageElement=stuElement.element("age");
			System.out.println(nameElement.getName()+"="+nameElement.getText());
			System.out.println(ageElement.getName()+"="+ageElement.getText());
			
		}
	}

	/**
	 * 练习一:取出所有学生的姓名年龄。
	 * @param document
	 */

public static void getStuInfos(Document document) {
		// TODO Auto-generated method stub
	Element rootElement=document.getRootElement();
	List<Element> eleList=rootElement.elements("student");
	for(int x=0;x<eleList.size();x++){
		Element stuElement=eleList.get(x);
		/*Element nameElement=stuElement.element("name");
		Element ageElement=stuElement.element("age");
		System.out.println(nameElement.getName()+"="+nameElement.getText());
		System.out.println(ageElement.getName()+"="+ageElement.getText());*/
		//与下面等价
		System.out.println(stuElement.elementText("name"));
		System.out.println(stuElement.elementText("age"));

	  }
	}

	
	/*
 * 获取所有学生
 */
	public static void getStuElements(Document document) {
		// TODO Auto-generated method stub
		Element rootElement=document.getRootElement();
		List<Element> eleList=rootElement.elements("student");
		for(int x=0;x<eleList.size();x++){
			Element stuElement=eleList.get(x);
			System.out.println(stuElement.getName());
		}
	}

	/**
	 * 演示元素节点
	 */
	public static void elementDemo(Document document){
		Element rootElement=document.getRootElement();
		
		//获取一个学生节点
		Element stuElement=rootElement.element("student");		
		System.out.println(stuElement.getName());
		//获取姓名
		Element nameElement=stuElement.element("name");
		String name=nameElement.getText();
		System.out.println(nameElement.getName()+"="+name);
		//获取年龄
		Element ageElement=stuElement.element("age");
		String age=ageElement.getText();
		System.out.println(ageElement.getName()+"="+age);
		
		
	}
	
}




你可能感兴趣的:(dom4j 解析xml文件 的操作)