以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  已使用XPATH取得所有节点信息,如何保存这些信息,谁空闲的来看看  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=74796)


--  作者: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,谁帮忙给点思路


--  作者:hexun831012
--  发布时间:5/13/2009 10:13:00 PM

--  
JAVA不懂,dom4j不敢恭维
但要遍历所有节点,一个递归就够了,用不着XPath

--  作者:imhr
--  发布时间:6/4/2009 11:30:00 PM

--  
不懂
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
5,275.391ms