尝试访问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)
Run Code Online (Sandbox Code Playgroud)
我知道解析有效,因为我可以让解析器打印出xml文档或将其保存到文件中.这是我正在使用的代码.
要解析文档:
public class Parser {
public Document parseWithSAX(File aFile) throws DocumentException {
SAXReader xmlReader = new SAXReader();
Document doc = xmlReader.read(aFile);
return doc;
}
Run Code Online (Sandbox Code Playgroud)
为了尝试获取节点,我尝试了以下几行,所有这些都产生了同样的错误:
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'");
Run Code Online (Sandbox Code Playgroud)
这将打印出xml doc,我假设这意味着doc(解析的xml doc)包含它应该包含的内容.
System.out.println(doc.asXML());
Run Code Online (Sandbox Code Playgroud)
我真的很感谢你的帮助!
小智 17
如果您使用的是mvn2,则以下内容适用于dom4j 1.6.1:
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
话虽这么说,我希望他们能够解决他们的问题并为所有人解决这个问题.
Dan*_*ne 5
所以如果我除了jdom4 jar之外还包含jaxen-1.1-beta-6.jar,xpath也能工作.请注意,jaxen-1.1.1.jar不起作用.如果你有一个来自jdom的classdef错误,请查看它们的依赖关系,并确保你使用他们批准的jar,(对于1.6.1版本,现在通常是jar的旧版本).希望这可以帮助任何有类似问题的人.再次感谢大家的帮助!