引用文章出处:https://www.ibm.com/developerworks/cn/xml/x-jdom/
简单介绍:
XPATH遵循文档对象模型(DOM)的路径格式,由于每个XML文档都可以看成是一棵拥有许多结点的树,每个结点可以是以下七个类型之一:根(root)、元素(element)、属性(attribute)、正文(text)、命名空间(namespace)、处理指令(processing instruction)和注释(comment)。XPATH的基本语法由表达式构成。在计算表达式的值之后产生一个对象,这种对象有以下四种基本类型:节点集合、布尔型、数字型和字符串型 。XPATH基本上和在文件系统中寻找文件类似,如果路径是以"/"开头的,就表明该路径表示的是一个绝对路径,这和在UNIX系统中关于文件路径的定义是一致的。以"//"开头则表示在文档中的任意位置查找。
获得并安装JDOM:
在 http://www.jdom.org/可以下载JDOM的最新版本,将压缩包中的jdom.jar及lib目录下的全部jar包加入到classpath就可以了。
<?xml version="1.0" encoding="UTF-8"?> <HD> <disk name="C"> <capacity>8G</capacity> <directories>200</directories> <files>1580</files> </disk> <disk name="D"> <capacity>10G</capacity> <directories>500</directories> <files>3000</files> </disk> </HD>
package com.potevio.zjx.study;
import java.util.*;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
/**
* JDOM模型的全部类都在org.jdom.*这个包里,
* org.jdom.input.*这个包里包含了JDOM的解析器,
* 其中的DOMBuilder的功能是将DOM模型的Document解析成JDOM模型的Document;
* SAXBuilder的功能是从文件或流中解析出符合JDOM模型的XML树。
*
* @author Zhou-Jingxian
*
*/
public class Sample1 {
public static void main(String[] args) throws Exception {
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(Sample1.class.getClassLoader()
.getResourceAsStream("sample.xml"));
Element root = doc.getRootElement();
List list = root.getChildren("disk");
for (int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
String name = element.getAttributeValue("name");
String capacity = element.getChildText("capacity");
String directories = element.getChildText("directories");
String files = element.getChildText("files");
System.out.println("磁盘信息:");
System.out.println("分区盘符:" + name);
System.out.println("分区容量:" + capacity);
System.out.println("目录数:" + directories);
System.out.println("文件数:" + files);
System.out.println("-----------------------------------");
}
}
}
package com.potevio.zjx.study;
import java.util.*;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
/**
* JDOM的关于XPATH的api在org.jdom.xpath这个包里。
* 这个类中的核心的api主要是两个selectNodes()和selectSingleNode()。
* 前者根据一个xpath语句返回一组节点;
* 后者根据一个xpath语句返回符合条件的第一个节点。
*
* @author Zhou-Jingxian
*
*/
public class Sample2 {
public static void main(String[] args) throws Exception {
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(Sample2.class.getClassLoader()
.getResourceAsStream("sample.xml"));
Element root = doc.getRootElement();
List list = XPath.selectNodes(root, "/HD/disk");
for (int i = 0; i < list.size(); i++) {
Element disk_element = (Element) list.get(i);
String name = disk_element.getAttributeValue("name");
String capacity = ((Text) XPath.selectSingleNode(disk_element,
"//disk[@name='" + name + "']/capacity/text()"))
.getTextNormalize();
String directories = ((Text) XPath.selectSingleNode(disk_element,
"//disk[@name='" + name + "']/directories/text()"))
.getTextNormalize();
String files = ((Text) XPath.selectSingleNode(disk_element,
"//disk[@name='" + name + "']/files/text()"))
.getTextNormalize();
System.out.println("磁盘信息:");
System.out.println("分区盘符:" + name);
System.out.println("分区容量:" + capacity);
System.out.println("目录数:" + directories);
System.out.println("文件数:" + files);
System.out.println("-----------------------------------");
}
}
}
Notice:
1。 xml和com包平级
2。引入的包为:ant.jar,jaxen.jar,saxpath.jar,xalan.jar,xerces.jar,xml-apis.jar,jdom.jar