200分求解:dom4j 使用XPATH解析。。诡异的问题
我用的是dom4j1.61方法写好了,在mian函数里面调用,没有问题,返回值是正确的。可是在JSP里面new了这个类的对象以后,传入同样的值调用方法,报错-Servle...
我用的是dom4j1.61 方法写好了,在mian函数里面调用,没有问题,返回值是正确的。可是在JSP里面new了这个类的对象以后,传入同样的值调用方法,报错
- Servlet.service() for servlet jsp threw exception
org.dom4j.InvalidXPathException: Invalid XPath expression: '/DYHFILE/yw[@ywid='104']'. Caused by: org/jaxen/dom4j/Dom4jXPath
at org.dom4j.xpath.DefaultXPath.parse(DefaultXPath.java:362)
at org.dom4j.xpath.DefaultXPath.<init>(DefaultXPath.java:59)
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)
at com.kmi.fsflash.dyh.queryInfo.Getywname(queryInfo.java:135)
at org.apache.jsp.dyh.page1_jsp._jspService(page1_jsp.java:71)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
我怕是路径的问题,所以我现在改成了绝对路径,可是还是同样的错误。米办法了,200分求解
类比较大,只放一个方法上来
public String Getywname(String ywid){
String filepath = "E:\\Work\\FSBackground\\WebRoot\\common\\DYHdata.xml";
Attribute att = null;
try {
doc = read.read(new File(filepath));
Element n = (Element)doc.selectSingleNode("/DYHFILE/yw[@ywid='"+ywid+"']");
att = n.attribute("ywname");
} catch (DocumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return att.getValue();
}
调用的时候,在main里面调用
queryInfo q= new queryInfo();
q.Getywname("102");
没有问题。
但是在JSP里面写
<%
queryInfo q = new queryInfo();
%>
<body>
<%=q.Getywname("102");%><br>
</body>
就不行了。报上面的错误。
麻烦帮忙看下吧,谢谢了 展开
- Servlet.service() for servlet jsp threw exception
org.dom4j.InvalidXPathException: Invalid XPath expression: '/DYHFILE/yw[@ywid='104']'. Caused by: org/jaxen/dom4j/Dom4jXPath
at org.dom4j.xpath.DefaultXPath.parse(DefaultXPath.java:362)
at org.dom4j.xpath.DefaultXPath.<init>(DefaultXPath.java:59)
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)
at com.kmi.fsflash.dyh.queryInfo.Getywname(queryInfo.java:135)
at org.apache.jsp.dyh.page1_jsp._jspService(page1_jsp.java:71)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
我怕是路径的问题,所以我现在改成了绝对路径,可是还是同样的错误。米办法了,200分求解
类比较大,只放一个方法上来
public String Getywname(String ywid){
String filepath = "E:\\Work\\FSBackground\\WebRoot\\common\\DYHdata.xml";
Attribute att = null;
try {
doc = read.read(new File(filepath));
Element n = (Element)doc.selectSingleNode("/DYHFILE/yw[@ywid='"+ywid+"']");
att = n.attribute("ywname");
} catch (DocumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return att.getValue();
}
调用的时候,在main里面调用
queryInfo q= new queryInfo();
q.Getywname("102");
没有问题。
但是在JSP里面写
<%
queryInfo q = new queryInfo();
%>
<body>
<%=q.Getywname("102");%><br>
</body>
就不行了。报上面的错误。
麻烦帮忙看下吧,谢谢了 展开
10个回答
展开全部
我也遇到同样的问题,现在也没找到为什么!
我的状况是这样的:
xml文件为 kpi.xml,如下
<?xml version="1.0" encoding="UTF-8"?>
<xmlconfig>
<kpi id="1" name="CPU占用">
<coltype name="SNMP" support="true">
<snmpagent>public|netcool</snmpagent>
<snmpruleid>0</snmpruleid>
</kpi>
<kpi id="2" name="XXX占用">
<coltype name="SM" support="false">
<snmpagent>public|netcool</snmpagent>
<snmpruleid>0</snmpruleid>
</kpi>
</xmlconfig>
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 .
希望能和贴主人一起探讨一下,这个问题的真正原因,随时关注此提问!
我的状况是这样的:
xml文件为 kpi.xml,如下
<?xml version="1.0" encoding="UTF-8"?>
<xmlconfig>
<kpi id="1" name="CPU占用">
<coltype name="SNMP" support="true">
<snmpagent>public|netcool</snmpagent>
<snmpruleid>0</snmpruleid>
</kpi>
<kpi id="2" name="XXX占用">
<coltype name="SM" support="false">
<snmpagent>public|netcool</snmpagent>
<snmpruleid>0</snmpruleid>
</kpi>
</xmlconfig>
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 .
希望能和贴主人一起探讨一下,这个问题的真正原因,随时关注此提问!
展开全部
org.dom4j.InvalidXPathException: Invalid XPath expression: '/DYHFILE/yw[@ywid='104']'.
这里面的'104'好像没有转译。
你提供的信息太少啦/把你的源码放上来。
太多的话,可以写个demo放上来。
看来是/DYHFILE/yw[@ywid='104']这一个关键字非法了。
可能在java里这个'104'可以正确识别
可是在javascript里面就不能正常识别了。
可以考虑把这段代码写到后台的java里面
直接把转换好的值传到jsp上面。
这里面的'104'好像没有转译。
你提供的信息太少啦/把你的源码放上来。
太多的话,可以写个demo放上来。
看来是/DYHFILE/yw[@ywid='104']这一个关键字非法了。
可能在java里这个'104'可以正确识别
可是在javascript里面就不能正常识别了。
可以考虑把这段代码写到后台的java里面
直接把转换好的值传到jsp上面。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是没有加jaxen这个jar包,因为dom4j使用xpath需要jaxen的支持。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看字面是XPath表达式有错误,
会不会是多个dom4j版本冲突?
会不会是多个dom4j版本冲突?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我完全 看不懂....这是什么啊 郁闷.... - -!囧死了...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询