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師