`
pharaohsprince
  • 浏览: 288697 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

《JDOM操作XML文件》的补充(增加搜索查询功能)

阅读更多

    前文《JDOM操作XML文件》发表后很多网友反响不错~但是没有包含搜索查询单一功能。
今天,补充一下。
    对XML的内容做查询,比较传统的方法是遍历,但是,这种原始的方法,在遇到太多子节点(>5层)的时候
效率就是问题了~~所以,法老这次采用的是使用JDOM和XPATH结合查询的办法。
    原文地址:http://blog.csdn.net/pharaohsprince/archive/2006/01/12/577344.aspx
代码片段如下:

 /**
  * 搜索XML文件信息
  */
public Vector SelXML(HttpServletRequest request) throws Exception {
  Vector xmlVector = null;
  FileInputStream fi = null;
  XmlBean findxml = null;
  try {
   request.setCharacterEncoding("GBK");// 内码转换
   String bookname = request.getParameter("bookname");
   String path = request.getParameter("path");
   fi = new FileInputStream(path);
   xmlVector = new Vector();
   SAXBuilder sb = new SAXBuilder();
   Document doc = sb.build(fi);
   Element root = doc.getRootElement();
   XPath xpath = XPath.newInstance("//书//书名[text()='"+bookname+"']");   
   /**
    * 查询出记录
    */
   List find = xpath.selectNodes(root); 
   Iterator iter = find.iterator();
   while (iter.hasNext()) {  
   Element item = (Element) iter.next();
   Element itemparent = item.getParentElement();//得到其父节点
//   System.err.println(item.getText());
//   System.err.println("ID:"+itemparent.getAttributeValue("id"));
//   System.err.println("书名:"+itemparent.getChild("书名").getText());
//   System.err.println("作者:"+itemparent.getChild("作者").getText());
//   System.err.println("--------------");  
   findxml = new XmlBean();
   findxml.setbookname(itemparent.getChild("书名").getText());
   findxml.setauthor(itemparent.getChild("作者").getText());
   findxml.setpub(itemparent.getChild("出版社").getText());
   findxml.setprice(itemparent.getChild("价格").getText());
   findxml.setpubdate(itemparent.getChild("出版日期").getText());
   xmlVector.add(findxml);
   }

  } catch (Exception e) {
   System.err.println(e + "error");
  } finally {
   try {
    fi.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return xmlVector;
 }

test.jsp中增加的代码
<form method="POST" action="xmlaction.jsp">
  <p align="center"><br>
    书 名:<input type="text" name="bookname" size="20"><input type="hidden" name="act" value="search"><br>
  </p>
  <input type="hidden" name="path" value="<%=path%>">
<p align="center"><input type="submit" value="查询" name="B1">
<input
 type="reset" value="重置" name="B2"></p>
</form>

xmlaction.jsp 中增加的代码
 else if (request.getParameter("act") != null
    && request.getParameter("act").equals("search")) {
   XmlBean xml = new XmlBean();
      Vector selxml = xml.SelXML(request);
      out.println("查询结果:"+selxml.size()+"条记录<br>-------------------<br>");
      for (int i = 0; i < selxml.size(); i++) {
   xml = (XmlBean) selxml.elementAt(i);
    out.println("书名:"+xml.getbookname()+"<br>");
    out.println("作者:"+xml.getauthor()+"<br>");
    out.println("出版社:"+xml.getpub()+"<br>");
    out.println("价格:"+xml.getprice()+"<br>");
    out.println("出版日期:"+xml.getpubdate()+"<br><br>");
    }
   out.println("<p align='center'><br><br>查询成功<br><br><a href='test.jsp'>返回</a>");
  }



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics