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人数>
班级>
学校>
输出结果: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();//
// 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内容:
输出结果为:
店铺名称: 小店
品牌 = 苹果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); // 递归调用
}
}
}
}
<集团军 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 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);
}
}
}
<用户信息>
<用户 name="王小二" age="20">用户>
<商品 name="兰盆" age="200">商品>
<用户 name="李小二" age="12">用户>
<用户 name="张小二" age="18">用户>
<商品 name="鼻烟壶" age="170">商品>
用户信息>
输出结果: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 list=xmlObj.selectNodes(xPath); //获得xml文件中任意位置符合条件的标签对象集合
for(Element e:list){
String elementName= e.getName();
String elementData = e.getText();
System.out.println(elementName+" "+elementData);
}
}
}
<学校>
<名称>北京大学名称>
<班级>
<名称>一年级一班名称>
<人数>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 list = xmlObj.selectNodes(xPath);
for (Attribute a : list) {
String attributeName = a.getName();
String attributeValue = a.getText();
System.out.println(attributeName + " " + attributeValue);
}
}
}
<集团军 name="李云龙集团军">
<师 name="云龙1师">
<团 name="云龙1团">
<班 name="云龙1班">
<战士 name="王小二"/>
<战士/>
班>
团>
师>
<师 name="云龙2师"/>
集团军>
输出结果: