用Jdom实现查询的方法,给出方案的,100分

cxhz_cn 2002-09-17 08:46:59
要求对某个XML进行查询

<cd>
<document>
<title>rational suite enterprise</title>
<keywords>
<keyword>软件</keyword>
<keyword>UML</keyword>
</keywords>
<original>rational co.</original>

</document>
</cd>

我输入某一个关键字,比如UML,要求返回的查询信息如下表格
title | original
_______________________________|_____________
rational suite enterprise |rational co.

可以吗?


能给个例子吗?我的意思是用JDOM来实现?
...全文
32 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
whiteclude 2002-09-18
  • 打赏
  • 举报
回复
xpath在现在的jdom版本里面算是扩展的,就是说还没有算到jdom里面去,所以需要用得另外下载.
另一个办法是,从根节点遍历下去,我这里提供了一个方法,尽管不是匹配元素值而是匹配属性值,但性质差不多,返回的是匹配成功的属性的元素的父节点.自己改改用吧
private static Vector retElements = new Vector();
/**
* 从参数XMl文档中提取相应属性值的元素的父元素集合
* @param Document doc 需提取元素集合的文档
* @param String elementname 匹配相应元素的元素名
* @param String attribName 匹配相应元素的属性名
* @param String attribValue 匹配相应元素的属性值
* @return Vector revect 返回元素的父元素集合
*/
public static Vector getelements(Document doc,String elementName,String attribName,String attribValue) throws JDOMException {
Vector revect = new Vector();
Vector tempElementsList = new Vector();
Element sourceroot = doc.getRootElement();
synchronized(retElements) {
getelements(sourceroot,elementName);
//获得符合元素名要求的元素的父元素集合
tempElementsList = (Vector)retElements.clone();


for (int i = 0; i < tempElementsList.size(); i++) {
Element tempElements = (Element)tempElementsList.get(i);
List childernList = tempElements.getChildren();
for (int j = 0; j < childernList.size(); j++) {
Element tempElement = (Element)childernList.get(j);
if ( tempElement.getName().equals(elementName.trim())) {
if ( tempElement.getAttributeValue(attribName).equals(attribValue.trim())) {
revect.add(tempElement);
}
} else {
//throw new JDOMException("一个错误发生,一个不符合要求的Element被检索");
}
}
}
retElements.clear();
}
return(revect);
}
Patrick_DK 2002-09-18
  • 打赏
  • 举报
回复
xml.apache.org
Patrick_DK 2002-09-18
  • 打赏
  • 举报
回复


1.JDOM beta8还不包括XPath(1.0啥子时候出哦),所以不适合做这个查询,象楼上写的那样,未免太麻烦了些,而且效率不高

2. 推荐直接用Xalan好了,比较方便
saucer 2002-09-17
  • 打赏
  • 举报
回复
try something like (did not test, so it may not work)

string s = "UML";

org.jdom.xpath.XPath xp = org.jdom.xpath.XPath.newInstance("//keyword[.='"+s + "']/../../title");

java.util.List nodes = xp.selectNodes(doc);

if (!nodes.isEmpty())
(Element)nodes.get(0);

xp = org.jdom.xpath.XPath.newInstance("//keyword[.='"+s + "']/../../original");

nodes = xp.selectNodes(doc);

if (!nodes.isEmpty())
(Element)nodes.get(0);



8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧