xpath的问题

venus224 2009-01-08 05:41:43
我想得到leaf='true'的所有属于id的值。我用如下代码会出错。

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true); // never forget this!
// String str = "<?xml version='1.0' encoding='UTF-8'?><tree><node text='君实软件' draggable='false' id='0'><node id='000000000003' text='测试1部' leaf='false' loader='[object Object]'/><node id='S0003' text='刘备' leaf='true' loader='[object Object]'/></node></tree>";//假设这个 str 中已经是一个xml格式的字符串了
String str="<?xml version='1.0'?><tree><node text='test' draggable='false' id='200826' searchParam='200826'><node id='200826000001' text='总兵都' leaf='false'><node id='A01' text='宋江' leaf='true'/><node id='200826000002' text='军机部' leaf='false' loader='[object Object]' searchParam='200826'><node id='A03' text='吴用' leaf='true' loader='[object Object]'/><node id='A04' text='公孙胜' leaf='true' loader='[object Object]'/><node id='A05' text='戴宗' leaf='true' loader='[object Object]'/><node id='A06' text='时迁' leaf='true' loader='[object Object]'/></node></node></node></tree>";
str=new String(str.getBytes("ISO8859_1"), "UTF-8");//把字符串转换为utf-8格式。
//StringBufferInputStream 继承自 InputStream 类
StringBufferInputStream in = new StringBufferInputStream(str);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(in);
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
//编译XPath表达式供以后计算使用。//BBB[@id='b1']
//xpath = "//RES[(@name = 'Count') and not(@parmType = 'DbField')]";
// XPathExpression expr = xpath.compile("//@id");
XPathExpression expr = xpath.compile("//node[(@id) and (@leaf='true')]");
//计算指定上下文中的 XPath 表达式并返回指定类型的结果。
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}

得到的值是:

null
null
null
null
null

不知道错在哪,忘大家帮帮忙!
...全文
107 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
venus224 2009-01-09
  • 打赏
  • 举报
回复
搞定了!这样就ok了!

System.out.println("node --" + i + "---" +"node attribute----" + nodes.item(i).getAttributes().item(0).toString());


pailman 2009-01-09
  • 打赏
  • 举报
回复
mark
venus224 2009-01-09
  • 打赏
  • 举报
回复
加分了,高手帮个忙吧!
急!
success000 2009-01-09
  • 打赏
  • 举报
回复
友情up
venus224 2009-01-09
  • 打赏
  • 举报
回复
再顶!
若大的社区没有人回答!
郁闷!
cdjatnewer 2009-01-09
  • 打赏
  • 举报
回复
处理xml你可以试着用一些比如 dom4j 或者 jdom 的开源框架啊,它们比jdk自带的那个好用些
venus224 2009-01-08
  • 打赏
  • 举报
回复
我试过,不行!
大家帮一下忙!
cdjatnewer 2009-01-08
  • 打赏
  • 举报
回复
像这样
XPathExpression expr = xpath.compile("//node[@leaf='true']");
属性不要加()
XPathExpression expr = xpath.compile("//node[(@leaf='true')]");
试试看



venus224 2009-01-08
  • 打赏
  • 举报
回复
CSDN的人气越来越差了!
venus224 2009-01-08
  • 打赏
  • 举报
回复
在线等!
venus224 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fulianglove 的回复:]
你用的这个API我不大清楚,你的XPath表达式("//node[(@id) and (@leaf='true')]")里面可以有( 和 )么?

[/Quote]
谢谢你的回复!
我直接用

XPathExpression expr = xpath.compile("//node[(@leaf='true')]");

得到的也是null
应该不是这个的问题!

fulianglove 2009-01-08
  • 打赏
  • 举报
回复
你用的这个API我不大清楚,你的XPath表达式("//node[(@id) and (@leaf='true')]")里面可以有( 和 )么?

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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