xml簡單操作

1.獲得根目錄標籤下直接子標籤內容:
package com.xxx;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

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

public class 獲得根目錄標籤下直接子標籤內容 {
	/**
	 * @param args
	 * @throws DocumentException 
	 * @throws IOException 
	 */
	public static void main(String[] args) throws DocumentException, IOException {
		//1.讀取流,指向硬盤上xml文件
		InputStream in =new FileInputStream("d://學校信息一覽.xml");
        // 2.創建一個XML文件讀取器
		SAXReader sax= new SAXReader();
		//3. 加載
		Document xmlObj=sax.read(in);
		// 4.讀取【根目錄標籤】
		Element rootElement=xmlObj.getRootElement(); //<學校></學校>
		// 5. 獲得【根目錄標籤】下,標籤名="班級"的所有的直接子標籤
		@SuppressWarnings("rawtypes")
		Iterator elementIt=rootElement.elementIterator("班級");
		// 6. 獲得每一個班級中【人數】和班級【名稱】
		while(elementIt.hasNext()){
			Element classElement = (Element) elementIt.next();//<班級>
			Element classNameElement=classElement.element("名稱");//<名稱>
			Element classNumElement=classElement.element("人數");//<人數>
			// 獲得標籤名稱
			String className=classNameElement.getName();
			String classNum=classNumElement.getName();
			//獲得標籤中包含的數據
			String classNameData=classNameElement.getText();//<名稱>數據</名稱>
			String classNumData=classNumElement.getText();//<人數>數據</人數>
			System.out.println(className+" : "+ classNameData);
			System.out.println(classNum+" : "+ classNumData);
		}
		in.close();
	}
}
學校信息一覽.xml文件內容如下:
<學校>
 <名稱>北京大學</名稱>
 <班級>
    <名稱>一年級一班</名稱>
    <人數>98</人數>
    <學員>
       <名稱>王二小</名稱>
    </學員>
 </班級>
 <班級>
    <名稱>一年級二班</名稱>
    <人數>99</人數>
 </班級>
</學校>
輸出結果:
名稱 : 一年級一班
人數 : 98
名稱 : 一年級二班
人數 : 99
需要引入兩個jar包(版本隨意):
dom4j-1.6.1.jar

jaxen-1.1.1.jar

2.讀取標籤中屬性內容:
package com.xxx;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Iterator;

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

public class 讀取標籤中屬性內容 {

	/**
	 * @param args
	 * @throws FileNotFoundException
	 * @throws DocumentException
	 */
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws FileNotFoundException, DocumentException {
		// 1.讀取流,指向硬盤上xml文件
		InputStream in = new FileInputStream("d://手機信息.xml");
		// 2.創建一個XML文件讀取器
		SAXReader sax = new SAXReader();
		// 3.加載 通過xml文件讀取器對象,將讀取流指向的xml文件加載到內存中
		Document xmlObj = sax.read(in);
		// 4.獲得【根目錄標籤】
		Element rootElement = xmlObj.getRootElement();// <shop 店鋪>
		// 5.獲得店鋪名稱
		String shopName = rootElement.attributeValue("店鋪");
		System.out.println("店鋪名稱: " + shopName);
		// 6. 獲得店鋪中銷售的手機信息
		Iterator mobileIt = rootElement.elementIterator();
		while (mobileIt.hasNext()) {
			Element mobile = (Element) mobileIt.next(); // 獲取一個手機Element
			Iterator infoIt = mobile.attributeIterator();
			while (infoIt.hasNext()) {
				// 將當前標籤中所有的屬性,封裝Attribute類型對象
				Attribute attributeObj = (Attribute) infoIt.next();
				// 獲得屬性名稱
				String attributeName = attributeObj.getName();
				// 獲得屬性數據
				String attributeData = attributeObj.getText();
				System.out.println(attributeName + " = " + attributeData);
			}
		}
	}
}
手機信息.xml內容:
<?xml version="1.0" encoding="UTF-8"?>
<shop 店鋪="小店">
  <mobile  品牌="蘋果6plus"  價格="6800"  顏色="白色"/>
  <mobile  品牌="華爲meta8"  價格="3800"  顏色="金色"/>
</shop>

輸出結果爲:
店鋪名稱: 小店
品牌 = 蘋果6plus
價格 = 6800
顏色 = 白色
品牌 = 華爲meta8
價格 = 3800
顏色 = 金色

3.通過遞歸調用獲得所有標籤中name屬性內容:
package com.xxx;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Iterator;

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

public class 通過遞歸調用獲得所有標籤中name屬性內容 {

	/**
	 * @param args
	 * @throws FileNotFoundException
	 * @throws DocumentException
	 */
	public static void main(String[] args) throws FileNotFoundException, DocumentException {
		// 1.讀取流,指向硬盤上xml文件
		InputStream in = new FileInputStream("d://部隊信息一覽.xml");
		// 2.創建一個XML文件讀取器
		SAXReader sax = new SAXReader();
		// 3.加載
		Document xmlObj = sax.read(in);
		// 4.讀取根目錄標籤
		Element rootElement = xmlObj.getRootElement();
		// 5.遞歸讀取標籤中name屬性
		readName(rootElement);
	}

	public static void readName(Element e) {
		// 1.獲得標籤名稱以及name屬性對應的value
		String elementName = e.getName(); //標籤名稱
		String attributeNameValue = e.attributeValue("name");
		System.out.println(elementName + "  " + attributeNameValue);
		// 2.獲得當前標籤下,所有的【直接】子標籤
		@SuppressWarnings("rawtypes")
		Iterator it = e.elementIterator();
		if (it != null) {
			while (it.hasNext()) {
				Element son = (Element) it.next();
				readName(son); // 遞歸調用
			}
		}
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<集團軍 name="李雲龍集團軍">
  <師  name="雲龍1師">
     <團  name="雲龍1團">
         <班  name="雲龍1班">
            <戰士 name="王小二"/>
            <戰士/>
         </班>
     </團>
  </師>
  <師/>
</集團軍>

輸出結果:

集團軍  李雲龍集團軍
師  雲龍1師
團  雲龍1團
班  雲龍1班
戰士  王小二
戰士  null
師  null

4.XPath獲得年齡在18歲以上的用戶姓名:
package com.xxx;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;

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

public class XPath獲得年齡在18歲以上的用戶姓名 {

	/**
	 * @param args
	 * @throws FileNotFoundException
	 * @throws DocumentException
	 */
	public static void main(String[] args) throws FileNotFoundException, DocumentException {
		// 1.讀取流,指向硬盤上xml文件
		InputStream in = new FileInputStream("d://用戶信息一覽.xml");
		// 2.創建一個XML文件讀取器
		SAXReader sax = new SAXReader();
		// 3.加載
		Document xmlObj = sax.read(in);
		// 4.拼寫xPath
		String xPath = "//用戶[@age>=18]";
		@SuppressWarnings("unchecked")
		List<Element> list = xmlObj.selectNodes(xPath);
		for (Element e : list) {
			String elementName = e.getName();
			String userName = e.attributeValue("name");
			String userAge = e.attributeValue("age");
			System.out.println(elementName + "  " + userName + "  " + userAge);
		}
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<用戶信息>
  <!-- 通過【遞歸】調用,查詢年齡在18歲以上的用戶信息 -->
   <用戶 name="王小二" age="20"></用戶>
   <商品 name="蘭盆" age="200"></商品>
   <用戶 name="李小二" age="12"></用戶>
   <用戶 name="張小二" age="18"></用戶>
   <商品 name="鼻菸壺" age="170"></商品>
</用戶信息>
輸出結果:
用戶  王小二  20
用戶  張小二  18


5.XPATH獲得任意位置的名稱標籤:
package com.xxx;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;

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


public class XPATH獲得任意位置的名稱標籤 {

	/**
	 * @param args
	 * @throws FileNotFoundException 
	 * @throws DocumentException 
	 */
	public static void main(String[] args) throws FileNotFoundException, DocumentException {
		//1.讀取流,指向硬盤上xml文件
		InputStream in =new FileInputStream("d://學校信息一覽.xml");
		//2.創建一個XML文件讀取器
		SAXReader sax= new SAXReader();
		//3.加載 通過xml文件讀取器對象,將讀取流指向的xml文件加載到內存中
		Document xmlObj=sax.read(in);
		//4.拼寫xPath  
		String xPath="//名稱"; //只能獲得標籤名是"名稱"的標籤
		@SuppressWarnings("unchecked")
		List<Element> list=xmlObj.selectNodes(xPath);  //獲得xml文件中任意位置符合條件的標籤對象集合
		for(Element e:list){
			String elementName= e.getName();
			String elementData = e.getText();
			System.out.println(elementName+"  "+elementData);
		}
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<學校>
 <名稱>北京大學</名稱>
 <班級>
    <名稱>一年級一班</名稱>
    <人數>98</人數>
    <學員>
       <名稱>王二小</名稱>
    </學員>
 </班級>
 <班級>
    <名稱>一年級二班</名稱>
    <人數>99</人數>
 </班級>
</學校>
輸出結果:
名稱  北京大學
名稱  一年級一班
名稱  王二小
名稱  一年級二班


6.XPATH獲得任意位置name屬性內容:
package com.xxx;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;

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

public class XPATH獲得任意位置name屬性內容 {

	/**
	 * @param args
	 * @throws FileNotFoundException
	 * @throws DocumentException
	 */
	public static void main(String[] args) throws FileNotFoundException, DocumentException {

		// 1.讀取流,指向硬盤上xml文件
		InputStream in = new FileInputStream("d://部隊信息一覽.xml");
		// 2.創建一個XML文件讀取器
		SAXReader sax = new SAXReader();
		// 3.加載
		Document xmlObj = sax.read(in);
		// 4.拼寫xPath
		String xPath = "//@name";  //獲得所有Element的name屬性
		@SuppressWarnings("unchecked")
		List<Attribute> list = xmlObj.selectNodes(xPath);
		for (Attribute a : list) {
			String attributeName = a.getName();
			String attributeValue = a.getText();
			System.out.println(attributeName + " " + attributeValue);
		}
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<集團軍 name="李雲龍集團軍">
  <師  name="雲龍1師">
     <團  name="雲龍1團">
         <班  name="雲龍1班">
            <戰士 name="王小二"/>
            <戰士/>
         </班>
     </團>
  </師>
  <師 name="雲龍2師"/>
</集團軍>
輸出結果:
name 李雲龍集團軍
name 雲龍1師
name 雲龍1團
name 雲龍1班
name 王小二
name 雲龍2師








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章