前文《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>");
}
分享到:
相关推荐
本文将详细讲解如何使用 Java 语言实现从 Excel 文件到 XML 文件的转换,并提供一份基于给定代码片段的详细分析与补充。 #### 核心知识点 1. **Java API 使用** - `org.apache.poi`: 这是用于读取和写入 ...
"Java&xml学习笔记.doc"则可能探讨了如何在Java应用程序中使用XML,包括解析XML、生成XML,以及利用JAXB、JDOM、DOM4J等库进行操作。"XML 数据库设计"很可能是关于如何设计和使用XML数据库的详细指南,涵盖了XML数据...
尽管XercesImpl.jar已经包含了核心解析功能,但这些额外的jar包可能包含特定版本的依赖或补充功能。 在实际开发中,根据项目需求,开发者可能会选择其中的一个或多个库来解析XML。例如,如果只需要简单的读取和写入...
而SAX解析器采用事件驱动模型,逐行读取文档,适合处理大型XML文件,以避免内存消耗。 在实际应用中,我们通常会使用编程语言(如Java、Python或C#)的库来处理XML。例如,Java中的JAXB(Java Architecture for XML...
在这个“SAXreader需要的jar包.zip”压缩文件中,包含了两个重要的第三方库:dom4j-2.1.3.jar和jaxen-1.1.6.jar,它们是用来增强和补充XML解析功能的。 dom4j是一个非常灵活的Java XML API,它提供了包括读取、写入...
EPUB文件本质上是一个ZIP压缩包,包含XML文件(如OPF文件——元数据容器,NCX文件——导航文件)和HTML、CSS、图像等资源。Epublib库提供了处理这些组件的API,使得开发者能够方便地进行EPUB电子书的生成和解析。 1...
Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...
8. **DOM2级和DOM3级**:DOM的后续版本增加了更多的功能,如样式操作、XML支持、事件接口等。 9. **性能优化**:频繁的DOM操作会降低页面性能,因此应尽量减少不必要的操作,使用文档碎片(`document....
通过将项目配置简化为一个或多个XML文件,Maven使得项目构建和维护变得更加容易。 在"repository1"中,我们发现了一系列关键的Java库: 1. **commons-configuration**:Apache Commons Configuration是Apache软件...
16. 其他技术:文档还提到了`CORBA`(通用对象请求代理体系结构)用于远程过程调用,`XML`和`jdom`用于处理XML文档。 由于文档内容是通过OCR扫描获得的,存在一些错误和不连贯的地方,我已尽力整理并解释文档内容,...
此外,Java的XML和JSON解析库(如JDOM、DOM4J和Jackson)可以帮助解析邮件中的结构化数据。利用Java的这些特性,开发者可以构建出高效、稳定的邮件处理系统。 **mailparser-master文件内容** "mailparser-master...