200分求解:dom4j 使用XPATH解析。。诡异的问题

2025-04-25 04:26:13
推荐回答(5个)
回答1:

我也遇到同样的问题,现在也没找到为什么!
我的状况是这样的:
xml文件为 kpi.xml,如下




public|netcool
0



public|netcool
0



main函数里面方法如下:

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public static void main(String args[]) {
String file = "d://kpi.xml";
int n = ModiXMLFile(file);
}
public static void ModiXMLFile(String filename) {

try {

SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filename));
int m = 0 ;
//得到kpi id的最大值
List list = document.selectNode("/xmlconfig/kpi");
Iterator iter = list.iterator();
while (iter.hasNext()) {
Element bookElement = (Element) iter.next();
if(!(bookElement.attributeValue("id")==null || bookElement.attributeValue("id").equalsIgnoreCase(""))){
int num = Integer.parseInt(bookElement.attributeValue("id"));
if(num>=m){
m= num;
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
运行能得到 kpi id的最大值是多少

但换个系统,在真正到公司的软机的系统上,就报
org.dom4j.InvalidXPathException: Invalid XPath expression: '/xmlconfig/kpi'. Caused by: org/jaxen/dom4j/Dom4jXPath
网上查了很久资料也没搞明白,有说是jdk版本的原因,有说是加载的dom4j包不一样,但都不对.
实在没办法了,用了个变通的办法,直接

Element root = document.getRootElement();
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element kpi = (Element) i.next();
if(!(kpi.attributeValue("id")==null || kpi.attributeValue("id").equalsIgnoreCase(""))){
int num = Integer.parseInt(kpi.attributeValue("id"));
if(num>=m){
m= num;
}
}
}
不再通过 Xpath .
希望能和贴主人一起探讨一下,这个问题的真正原因,随时关注此提问!

回答2:

org.dom4j.InvalidXPathException: Invalid XPath expression: '/DYHFILE/yw[@ywid='104']'.
这里面的'104'好像没有转译。
你提供的信息太少啦/把你的源码放上来。
太多的话,可以写个demo放上来。

看来是/DYHFILE/yw[@ywid='104']这一个关键字非法了。
可能在java里这个'104'可以正确识别
可是在javascript里面就不能正常识别了。
可以考虑把这段代码写到后台的java里面
直接把转换好的值传到jsp上面。

回答3:

应该是没有加jaxen这个jar包,因为dom4j使用xpath需要jaxen的支持。

回答4:

看字面是XPath表达式有错误,
会不会是多个dom4j版本冲突?

回答5:

我完全 看不懂....这是什么啊 郁闷.... - -!囧死了...