------ procedure.xml------
<? xml version="1.0" encoding="UTF-8" ?>
package com.lovo.test;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
/**
dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar
*/
public class ReadXml {
public static void main(String[] args) throws Exception{
//得到一个读取器(固定)
SAXReader sax = new SAXReader();
//根据类的路径 读取 文件
Document doc =sax.read(ReadXml.class.getResourceAsStream("/procedure.xml"));
//指定要查找的路径,根路径用两个/
String xpath = "//root/procedure";
//执行查询,返回多个节点放到集合中
List<Element> list = doc.selectNodes(xpath);
//集合循环
for(Element e:list){
//得到当前节点的(第1个)name子节点的文本
String name = e.elementText("name");
System.out.println(name);
//得到当前节点所有叫 param 的子节点
List<Element> listChild = e.elements("param");
//循环
for(Element e2:listChild){
//节点的属性通常用 valueOf("@属性名")
System.out.println(e2.valueOf("@index")+","+e2.valueOf("@type")+","+e2.valueOf("@inOutType"));
}
}
//根据属性直接定位到某一个节点
String xpath2 = "//root/procedure[@id='sp_reg']";
//返回一个节点,Node和Element其实是相同的
Node node = doc.selectSingleNode(xpath2);
// Element ele = (Element)node;
System.out.println(node.valueOf("@desc"));
}
}