【问题标题】:JDom working with XPathJDom 使用 XPath
【发布时间】:2011-10-26 20:30:14
【问题描述】:

我是 JDom 的新手,我尝试使用 XPath 来访问我的 xml 文件。我的代码如下:

public static void main(String[] args) throws Exception {
    Document doc = new SAXBuilder().build("file.xml");
    XPath x = XPath.newInstance("xpath");

    //select the first element in the nodeset
    Element elem = (Element)x.selectSingleNode(doc);
    ......
}

我已经导入了 org.jdom.xpath.XPath 类。当我使用 javac 编译该类时,它没有给出任何错误,但是当我尝试运行该程序时,它给出了以下异常消息:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at org.jdom.xpath.XPath.newInstance(XPath.java:134)
        at myclassname.main(xmlTohtml.java:18)
Caused by: java.lang.ClassNotFoundException: org.jaxen.NamespaceContext
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        ... 4 more

我在这里错过了什么吗?任何帮助将不胜感激!

我在我的主目录下的 .cshrc 文件中添加了 jaxen 和 dom4j,这两个 jar 文件也在同一个目录中。

setenv CLASSPATH ${CLASSPATH}:/homedirectory/jaxen-1.1.1.jar
setenv CLASSPATH ${CLASSPATH}:/homedirectory/dom4j-1.6.1.jar

当我从命令行尝试这个命令时,它会生成新的异常......

Exception in thread "main" java.lang.NoClassDefFoundError: :
Caused by: java.lang.ClassNotFoundException: :
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

顺便说一下,我的程序中导入的类是:

import java.util.Iterator;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.Namespace;
import org.jdom.xpath.XPath;

【问题讨论】:

  • 不要使用 CLASSPATH 环境变量,当他们说在类路径中包含 jar 时,他们的意思是使用 -cp 标志将其添加到 java 命令中。
  • 谢谢,我输入了这个命令:java -cp ../jaxen-1.1.1.jar : ../dom4j-1.6.1.jar:。 xmlTohtml,它仍然抛出异常...
  • 在类路径中有 dom4j 但在代码中使用 jdom 很奇怪。也许向我们展示整个类路径会有所帮助。

标签: java dom sax jdom


【解决方案1】:

在类路径中包含dom4j.jarjaxen.jar

【讨论】:

  • 我在 .cshrc 文件中添加了两个文件。 setenv CLASSPATH ${CLASSPATH}:jaxen-1.1.1.jar setenv CLASSPATH ${CLASSPATH}:dom4j-1.6.1.jar,这两个文件和.cshrc文件在同一个目录,但是还是不行。 ..
【解决方案2】:

只需 jaxen1.1.3 即可,不需要 dom4j

【讨论】:

    【解决方案3】:

    我怀疑您的类路径中没有 jaxen-1.1.3.jar。如果我假设你是从命令行运行它,你会想要:

    java -cp jaxen-1.1.3.jar:. myJavaProgram
    

    【讨论】:

    • 谢谢,但它不起作用。我将 jaxen 和 dom4j 放在我的 .cshrc 文件中。
    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2011-03-11
    • 2010-10-07
    相关资源
    最近更新 更多