2011-08-14 2 views
3

저는 JDom의 초보자입니다. XPath를 사용하여 XML 파일에 액세스하려고합니다. 내 코드는 다음과 같습니다 :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 클래스를 가져 왔습니다.

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 

내가 여기서 뭔가를 놓친 건가 : 나는이 프로그램을 실행하려고 할 때이 클래스를 컴파일 javac의를 사용하는 경우,이 오류를 포기하지 않았다, 그러나, 다음과 같은 예외 메시지를 제공? 어떤 도움이라도 대단히 감사하겠습니다!

내 홈 디렉토리 바로 아래에있는 .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

을하지 않아도, 때이 classpath에 jar 파일을 포함 시키면 -cp 플래그를 사용하여 java 명령에 추가된다는 것을 의미합니다. –

+0

고마워, 나는이 명령을 입력했다 : java -cp ../jaxen-1.1.1.jar : ../dom4j-1.6.1.jar :. xmlTohtml, 여전히 예외를 throw합니다 ... – 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

고맙지 만 작동하지 않습니다. 내 .cshrc 파일에 jaxen과 dom4j를 넣었습니다. – Michael

-1

단지의 jaxen1.1.3이 충분하고 DOM4J는 CLASSPATH의 ENV의 VAR를 사용하지 않는