XMLRead

来源:互联网 发布:固体密度数据 编辑:程序博客网 时间:2024/05/22 01:26

------ procedure.xml------

 

<?xml version="1.0" encoding="UTF-8" ?>
-<root>
-<procedure id="sp_reg" desc="注册功能">
  <name>CALL sp_reg(?,?)</name>
  <param index="1" type="Integer" />
  <param index="2" type="String" />
  </procedure>
-<procedure>
  <name>CALL sp_login(?,?,?)</name>
  <param index="1" type="Integer" />
  <param index="2" type="Integer" />
  <param index="3" type="String" inOutType="out" />
  </procedure>
-<procedure>
  <name>CALL sp_update_sal(?,?,?)</name>
  <param index="1" type="Integer" />
  <param index="2" type="String" />
  <param index="3" type="ResultSet" inOutType="out" />
  </procedure>
  </root>
 
-----------------------

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"));
 }

}

 
原创粉丝点击