当我试图访问dom4j上解析的xml文档的任何节点时,我得到了以下异常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
at xmlparser.LevelsExtractor.findI(LevelsExtractor.java:73)
at xmlparser.Main.main(Main.java:33)
我知道解析是有效的,因为我可以让解析器打印出xml文档或将其保存到文件中。这是我正在使用的代码。
要解析文档,请执行以下操作:
public class Parser {
public Document parseWithSAX(File aFile) throws DocumentException {
SAXReader xmlReader = new SAXReader();
Document doc = xmlReader.read(aFile);
return doc;
}
为了尝试获取节点,我尝试了以下几行代码,所有这些代码行都会产生相同的错误:
List list = doc.selectNodes("");
QName qn = new QName("////Token/text()='Introduction'");
Element el = doc.selectSingleNode("////Token/text()='Introduction'");
Node node = doc.selectSingleNode( "/DOCUMENT/PAGE/TEXT/TOKEN/text()= 'Introduction'");
这将打印出xml文档,我认为这意味着文档(已解析的xml文档)包含它应该包含的内容。
System.out.println(doc.asXML());
我真的很感谢你的帮助!
发布于 2010-12-04 07:04:39
如果您使用的是mvn2,则以下内容将适用于dom4j 1.6.1:
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
话虽如此,我希望他们修复他们的pom,并为每个人省去这个麻烦。
发布于 2009-11-07 09:13:20
因此,如果除了jdom4 jar之外还包含jaxen-1.1-beta-6.jar,那么xpath就可以工作。注意: jaxen-1.1.1.jar不起作用。如果您有来自jdom的classdef错误,请查看它们的依赖关系,并确保您使用的是它们认可的jar(对于1.6.1版本,现在通常是jar的较旧版本)。希望这篇文章能帮助任何有类似问题的人。再次感谢大家的帮助!
发布于 2009-11-04 04:29:03
如果在加载类以供java.lang.NoClassDefFoundError
使用时,在类路径上找不到在编译特定类时可用的依赖项,则JVM将抛出JVM。
你是如何调用解析器代码的?检查并确保DOM4J发行版的lib
文件夹中的所有DOM4J依赖项(jaxen、jaxme-api等)都在类路径上。
如果从命令行调用解析器,则可以使用-classpath
选项:
java -classpath C:\myjars\jar1.jar;C:\myjars\jar1.jar
例如,如果要从Ant调用解析器,请使用<classpath>
标记:
<classpath>
<pathelement path="C:\myjars\jar1.jar"/>
<pathelement path="C:\myjars\jar2.jar"/>
</classpath>
您的xpath表达式甚至没有被求值,所以您应该停止调整这些表达式,直到您解决了类路径问题。
https://stackoverflow.com/questions/1669625
复制相似问题