2014-09-25 102 views
0

我想在java应用程序中使用XSLT转换我的XML文件。下面是我的代码,但它给classNot发现错误。我试图解决这个问题,但该方法没有在jdk 5之后使用。 您可以给我更好的方法来使用Java程序中的XSLT转换XML。 下面是我的代码:在Java程序中使用XSLT进行XML转换

import java.io.File; 

import javax.xml.transform.Result; 
import javax.xml.transform.Source; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 


class Transform { 
    public static void main(String[] args) throws TransformerException { 
    String stylesheetPathname = "C:/abc.xml"; 
    String inputPathname = "C:/scripts/transform.xslt"; 
    String outputPathname = "C:/abc_transformed.xml"; 

    TransformerFactory factory = TransformerFactory.newInstance(); 
    Source stylesheetSource = new StreamSource(new File(stylesheetPathname).getAbsoluteFile()); 
    Transformer transformer = factory.newTransformer(stylesheetSource); 
    Source inputSource = new StreamSource(new File(inputPathname).getAbsoluteFile()); 
    Result outputResult = new StreamResult(new File(outputPathname).getAbsoluteFile()); 
    transformer.transform(inputSource, outputResult); 
    } 
} 

错误:

Exception in thread "main" javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found 
at javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:107) 
at Transform.main(Transform.java:18) 


Caused by: java.lang.ClassNotFoundException:org.apache.xalan.processor.TransformerFactoryImpl 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
at javax.xml.transform.FactoryFinder.getProviderClass(FactoryFinder.java:119) 
at javax.xml.transform.FactoryFinder.newInstance(FactoryFinder.java:182) 
at javax.xml.transform.FactoryFinder.findJarServiceProvider(FactoryFinder.java:364) 
at javax.xml.transform.FactoryFinder.find(FactoryFinder.java:286) 
at javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:101 
+0

您正在使用哪个java版本? – tmarwen 2014-09-25 14:15:36

+0

我正在使用jdk 1.7。 Java SE 7 – suraj08 2014-09-25 14:22:31

+0

在java中使用xslt转换xml的任何其他选项也将完成我的工作。 – suraj08 2014-09-25 15:39:13

回答

2

我已经添加了xml-apis.jar,xercesImpl.jar并且错误已解决。 感谢您的努力和帮助。

0

确保该特定类文件的jar文件包含在类路径中。

它是Xalan的罐

您可以在这里找到

http://xml.apache.org/xalan-j/

最新的jar文件这应该某处解决ClassNotFoundException的

+0

我已经添加了Xalan jar文件,但它给出了相同的错误。我试着使用不同版本的文件,但它不工作。 – suraj08 2014-09-25 14:38:53

0

这应该是一个服务的声明在你的一部分代码库,或者它应该已经退回到默认的xml工厂。

简短的回答是提供xaran jar作为classpath属性。更多信息可以在here找到。

+0

我尝试使用jar,但它仍然给出相同的错误。 – suraj08 2014-09-25 15:11:05

+0

请问您可以在环境中添加更多的细节,那么,什么样的应用程序?你如何启动它?您是否有任何依赖项提供给应用程序? – tmarwen 2014-09-25 15:15:08

+0

这是我在eclipse中创建的单个java程序。我已经添加了xalan的外部jar。当我运行这个程序时,它会给出错误。它没有任何其他依赖性。 – suraj08 2014-09-25 15:37:41