2011-08-14 2 views
3

私はJDomの初心者です。私はxmlファイルにアクセスするためにXPathを使用しようとしています。私のコードは次のようなものです:JDom with 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を追加します.2つの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

を必要とされていないときに、CLASSPATHのENVのVARを使用していませんclasspathにjarを追加すると、javaコマンドに-cpフラグを使って追加することになります。 –

+0

ありがとう、私はこのコマンドを入力しました:java -cp ../jaxen-1.1.1.jar:../dom4j-1.6.1.jar :. xmlTohtml、それはまだ例外をスローします... – Michael

+0

あなたはクラスパスでdom4jを持っていますが、あなたのコードでjdomを使っています。クラスパス全体を見せるのに役立つかもしれません。 –

答えて

9

クラスパスにdom4j.jarjaxen.jarを含めます。

+0

自分の.cshrcファイルに2つのファイルを追加しました。 setenv CLASSPATH $ {CLASSPATH}:jaxen-1.1.1.jar setenv CLASSPATH $ {CLASSPATH}:dom4j-1.6.1.jarの2つのファイルは.cshrcファイルと同じディレクトリにありますが、それでも動作しません。 .. – Michael

2

jaxen-1.1.3.jarがクラスパスにないと思われます。私はあなたがコマンドラインからこれを実行していたと仮定した場合、あなたがしたいと思います:

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

ありがとうございますが、動作しません。 .cshrcファイルにjaxenとdom4jを入れました。 – Michael

-1

だけのjaxen1.1.3は十分とdom4jの