Java對XML文檔進行解析(dom4j解析)

1.獲取元素:

	@Test //獲取第一個user節點
	public void readDemo() throws Exception{
		//獲取DOM
		SAXReader sax = new SAXReader();
		Document dom = sax.read("./xml/user.xml");
		//獲取根節點
		/**
		 * ELement中有三種方法獲得元素:
		 * element(name)//查單
		 * elements(name)	//查全,返回一個list
		 * elementIterator()//迭代,返回一個Iterator
		 */
		
		Element root = dom.getRootElement();
		Element eUser = root.element("user");
		
		//獲取屬性
		String id1=eUser.attributeValue("id");
		String id2=eUser.attribute("id").getValue();
		System.out.println("id1:"+id1+" id2:"+id2);
		
		//獲取子元素
		String name=eUser.element("name").getText();	//法一
		String age=eUser.elementText("age");			//法二
		System.out.println("name:"+name+" age:"+age);
	}
@Test //遍歷用戶,獲取所有user的信息
	public void iteratorDemo() throws Exception{
		SAXReader sax=new SAXReader();
		Document dom=sax.read("./xml/user.xml");
		Element root=dom.getRootElement();
		
//		Iterator<Element> it = root.elementIterator();		//遍歷所有兒子節點
		Iterator<Element> it = root.elementIterator("user");		//遍歷所有兒子節點
		while(it.hasNext()){
			Element element=it.next();
			String id=element.attributeValue("id");
			String name=element.elementText("name");
			String age=element.elementText("age");
			System.out.println(id+","+name+","+age);
		}
	}
2.對文檔進行持久化:

@Test //給文檔添加一個aa元素--持久化
	public void addDemo() throws Exception{
		Document dom=new SAXReader().read("./xml/user.xml");
		
		Element root=dom.getRootElement();
		//給root添加子元素aa
		Element aa = root.addElement("aa");
		//給aa添加屬性
		aa.addAttribute("id", "aa1001");
		//給aa添加子元素:name
		Element eA_Name = aa.addElement("name");
		eA_Name.setText("aaaaaa");
		//給aa添加子元素:age
		aa.addElement("age").setText("991");
		
		//持久化
		//1.dom.write(FileWrite())
//		Writer w=new FileWriter("./xml/user.xml");
//		dom.write(w);		//字符流必須刷緩存
//		w.close();
		
		//2.XMLWriter類中的writer(dom)
//		FileWriter fw=new FileWriter("./xml/user.xml");
//		XMLWriter w=new XMLWriter(fw);
//		w.write(dom);
//		w.close();
		
		//3.以指定字符編碼寫
		OutputFormat format=OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");
		//把格式加入到XMLWriter中
		XMLWriter w=new XMLWriter(new FileWriter("./xml/user.xml"),format);
		w.write(dom);
		w.close();
	}
3.刪除元素:

@Test //刪除根節點下的最後一個子元素
	public void delDemo() throws Exception{
		Document dom=new SAXReader().read("./xml/user.xml");
		
		Element root=dom.getRootElement();
		
		List<Element> list=root.elements();
		Element eLast=list.get(list.size()-1);
		eLast.getParent().remove(eLast);
		
		//持久化
		XMLWriter w=new XMLWriter(new FileWriter("./xml/user.xml"));
		w.write(dom);
		w.close();
	}
4.修改元素:

@Test //更改文檔根節點下最後一個子元素的信息
	public void updateDemo() throws Exception{
		Document dom=new SAXReader().read("./xml/user.xml");
		Element root=dom.getRootElement();
		
		//先找到元素
		List<Element> list = root.elements();
		Element eLast=list.get(list.size()-1);
		//在對元素進行設置值
		//若屬性或元素存在則修改,否則爲添加
		eLast.addAttribute("id", "修改後的id");
		Element name = eLast.element("name");
		name.setText("修改後的name");
		
		
		//持久化
		XMLWriter w=new XMLWriter(new FileWriter("./xml/user.xml"));
		w.write(dom);
		w.close();
		
	}
5.添加元素:

//從零開始創建一個xml文檔:aa.xml
	@Test
	public void createNewXMLDemo() throws Exception{
		Document dom=DocumentHelper.createDocument();
		Element root=dom.addElement("cities");
		Element e=root.addElement("city");
		e.addAttribute("id", "c1001");
		Element name = e.addElement("name");
		name.setText("邵陽");
		
		//持久化
		XMLWriter w=new XMLWriter(new FileWriter("./xml/aa.xml"));
		w.write(dom);
		w.close();
	}
6.xpath

////////////xpath技術:詳細語法參考文檔Xpath_simples.pdf
	/**		dom不支持,dom4j支持
	 * Xpath的基本套路:通過dom調用Node接口中的如下方法(參數採用xpath語法)進行節點選擇
	 * 相當於正則表達式
	 * 1)selectNodes(xpathExpression)--List
	 * 2)selectObject(xpathExpression)--Object
	 * 3)selectSingleNode(xpathExpression)--Node
	 * 
	 * 注意一個細節:由於上面的幾個方法是Node接口中的,因此普通的Element對象也能調用
	 * 		但是其含義跟dom調用一樣的  , 也就是說 使用一個 x.selectNodes(xpathExpression) 跟dom.selectNodes(xpathExpression)是一樣的
	 * 											都是查找整顆樹下的元素
	 */
	@Test
	public void xpathDemo() throws Exception{
		Document dom=new SAXReader().read("./xml/user.xml");
		//獲取所有的name元素
//		String xpath="//name";
//		String xpath="//user/name";//獲取所有user下的name兒子元素  只能是一個/
//		String xpath="//user//name";//獲取所有user的子孫後代的name元素 
		String xpath="/users/name";
		
		
		List<Element> list = dom.selectNodes(xpath);
		for(Element e:list){
			System.out.println(e.getText());
		}
	}
@Test
	public void xpathDemo2() throws Exception{
		Document dom=new SAXReader().read("./xml/user.xml");
		
//		String xpath="//user[@name][@pwd]";	//查找同時具有name和pwd屬性的user節點
		String xpath="//user[@name='dragon'][@pwd='1234']";	//查找同時具有name爲"dragon"和pwd""屬性的user節點
		
		List<Element> list = dom.selectNodes(xpath);
		for(Element e:list){
			System.out.println(e.getText());
		}
	}
Xpath_simples.pdf在我的資源中可以找到。
發佈了102 篇原創文章 · 獲贊 89 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章