-- 作者:aianbb
-- 发布时间:5/12/2009 7:40:00 PM
-- 已使用XPATH取得所有节点信息,如何保存这些信息,谁空闲的来看看
import org.dom4j.Document; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.dom4j.DocumentException; import java.util.List; import java.io.*; public class XmlReader { /** * 使用SAX技术解析XML文挡 */ private SAXReader rd; private Document doc = null; private StringBuffer sb= new StringBuffer(""); public String ps = ""; //在构造方法中初始化SAX解析器和Document对象实例 public XmlReader(String path) throws DocumentException { rd = new SAXReader(); doc = rd.read(new File(path)); } //判断文档对象是否为空 public boolean isDocEmpty() { if(doc==null) return true; return false; } //根据Xpath和节点来迭代的检查其子节点 private void checkNode(String xpath,Node node) { //把当前node的名字输出到控制台 this.write("<"+node.getName()+">"); //返回当前node的所有子节点的集合 List list = node.selectNodes(xpath+"/*"); //判断节点集合是否为空,如果为空 那么当前节点为树的叶子节点 没有子节点了 if(list==null||list.size()<=0) { System.out.println("当前节点已是叶子节点"); /** * 把叶子节点的内容也输出到控制台 */ String str = ""; if(node.getText()!=null){ str=node.getText(); } sb.append(this.write(str)).append('\n'); //sb.append(this.write(str)); } //如果不为空 那么有当前节点有子节点 else { //System.out.println("当前节点还有子节点"); //循环取出当前节点的子节点并调用checkNode()方法 for(int a=0;a<list.size();a++) { Node nd = (Node)list.get(a); System.out.println("当前节点名字为:" + nd.getName()); System.out.println( nd.getName()); System.out.println("当前路径为:"+xpath+"/"+nd.getName()+"["+(a+1)+"]"); this.checkNode(xpath+"/"+nd.getName()+"["+(a+1)+"]",nd); } } //输出叶子节点的结束比配符 write("</"+node.getName()+">"); } //输出到控制台 private String write(String str) { //sb.append(str); return str; //System.out.println(str); } //从根节点开始选取 如/emplist 表示选取根元素emplist public String showAllInfoToConsole() { List list = doc.selectNodes("/*"); Node nd = (Node)list.get(0); System.out.println("根节点名字为:"+nd.getName()); ps = nd.getName(); Administrator administrator = new Administrator(); administrator.settts(ps); //System.out.println(ps); checkNode("/"+nd.getName(),nd); System.out.println("sb=" + sb.toString()+"/sb"); return sb.toString(); } public static void main(String[] args) { // TODO Auto-generated method stub XmlReader rd = null; try { rd = new XmlReader("F:/cd.xml"); } catch (DocumentException e) { e.printStackTrace(); } if(!rd.isDocEmpty()) rd.showAllInfoToConsole(); } } 我想将根节点,子节点,文本节点信息都保存下来然后存进SQL,谁帮忙给点思路
|