XMLRead

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

}

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章