前文《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>");
}
分享到:
相关推荐
JDOM 操作xml 解析读取xml文件 修改 删除 增添xml指定节点信息的XmlBean
NULL 博文链接:https://xurichusheng.iteye.com/blog/1518547
jdom解析xml文件的源代码、jar包以及示例xml文件
jdom解析xml文件小实例jdom解析xml文件小实例jdom解析xml文件小实例
一个关于用jdom解析xml,遍历xml,建立xml的简单例子.
用JDOM操作XML文件
利用JDOM解析xml文件,并根据xml中为类名,生成相应的对象。
NULL 博文链接:https://zhaohong.iteye.com/blog/426761
JAVA操作XML\XML\用JDOM操作XML文件--JSP中文网.mht
* fileName文件的路徑和名稱 * firstChild為xml第一個節點 * */ public Element ReaderXml(String fileName,String firstChild){ Element element=null; try{ File xmlFile = new File(fileName); ...
JDOM操作XML文件 这篇文章讲的不错~把JDOM的基本操作实例化了,不过由于当时的作者用的JDOM版本还比较陈旧,所以部分代码会编译出错!支持中文也不好!所以,法老在原作者的基础上对程序做了修改!休正了编译出错以及...
jdom解析XML文件and把字符串解析成XML.txt jdom解析XML文件and把字符串解析成XML.txtjdom解析XML文件and把字符串解析成XML.txt
Dom JDom 解析xml 文件 Dom JDom 解析xml 文件 Dom JDom 解析xml 文件 自己使用 最好不要下载
Jdom查找XML文件的所有节点内容,一个简单的递归算法
jdom 操作XML实现增删改查 jdom 操作XML实现增删改查
利用jdom读取xml 虽然是我自己写的 但是觉得有必要与大家分享一下
用JDOM读取XML文件 用JDOM读取XML文件用JDOM读取XML文件
利用jdom对xml文档进行操作,比如读写,删除等,我当时编码的时候找到的,比较详细,希望对大家有用。
对于含有子节点的复杂的XML文件,可以采用jdom.jar来解析。 上传的文件包括程序,XML文件,jdom包,jdbc包 对于复杂的XML文件,可以采用层层解析,虽然方法不是很简便,但是,可以完成解析的任务,而且,准确率很高...
使用 jdom.jar包读取、修改 xml文件,并将修改后的xml保存