2011-08-14 71 views
3

我是JDom的新手,我嘗試使用XPath訪問我的xml文件。我的代碼如下:JDom使用XPath

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; 
+0

dom4j中不使用CLASSPATH的環境變量,當他們比如將jar包括在類路徑中,這意味着使用-cp標誌將它添加到java命令中。 –

+0

謝謝,我輸入了這個命令:java -cp ../jaxen-1.1.1.jar:../dom4j-1.6.1.jar :. xmlTohtml,它仍然會拋出異常... – Michael

+0

這很奇怪你在類路徑中有dom4j,但是在你的代碼中使用了jdom。也許這會有助於向我們展示整個類路徑。 –

回答

9

在類路徑中包含dom4j.jarjaxen.jar

+0

我在.cshrc文件中添加了兩個文件。 setenv CLASSPATH $ {CLASSPATH}:jaxen-1.1.1.jar setenv CLASSPATH $ {CLASSPATH}:dom4j-1.6.1.jar,這兩個文件與.cshrc文件位於同一目錄中,但仍不起作用。 .. – Michael

2

我懷疑你的類路徑中沒有jaxen-1.1.3.jar。如果我假設你是從在命令行中運行這個,你會想:

java -cp jaxen-1.1.3.jar:. myJavaProgram 
+0

謝謝,但它不工作。我把jaxen和dom4j放入我的.cshrc文件中。 – Michael

-1

只是jaxen1.1.3已經足夠,不需要