2016-08-19 10 views
2

XSLT를 처음 사용합니다. 이전에는 명령 줄을 사용하여 XSLT를 수행하는 데 익숙했습니다. 그냥 같이 :Java를 사용하여 Java 함수를 호출하는 XSLT 수행

@echo off 
set XALAN_JAR=%OPENCCG_HOME%\lib\xalan.jar 
java -classpath .;%XALAN_JAR% org.apache.xalan.xslt.Process -IN recommend_person.xml -XSL planner.xsl -OUT people_graph.xml 

이 잘 근무하고 나는 planner.xsl 파일 내부에 자바 함수를 호출 할 수 있었다. 하지만 지금은 자바 프로그램 내에서 같은 일을하고 싶은이 같은 프로그램 작성 :

file:///C:/xslt/planner.xsl; Line #16; Column #60; javax.xml.transform.TransformerException: java.lang.ClassNotFoundException: NodeIdGen 
file:///C:/xslt/planner.xsl; Line #20; Column #55; Unknown error in XPath. 
file:///C:/xslt/planner.xsl; Line #23; Column #65; Variable idgen is directly or indirectly referencing itself! 
Transform from C:/xslt/recommend_person.xml to C:/xslt/output.xml using C:/xslt/planner.xsl performed 
file:///C:/xslt/planner.xsl; Line #16; Column #60; javax.xml.transform.TransformerException: java.lang.ClassNotFoundException: NodeIdGen 
file:///C:/xslt/planner.xsl; Line #23; Column #65; Unknown error in XPath. 
file:///C:/xslt/planner.xsl; Line #26; Column #82; Variable idgen is directly or indirectly referencing itself! 
file:///C:/xslt/planner.xsl; Line #16; Column #60; javax.xml.transform.TransformerException: java.lang.ClassNotFoundException: NodeIdGen 
file:///C:/xslt/planner.xsl; Line #26; Column #82; Unknown error in XPath. 
file:///C:/xslt/planner.xsl; Line #29; Column #129; Variable idgen is directly or indirectly referencing itself! 
file:///C:/xslt/planner.xsl; Line #16; Column #60; javax.xml.transform.TransformerException: java.lang.ClassNotFoundException: NodeIdGen 
file:///C:/xslt/planner.xsl; Line #29; Column #129; Unknown error in XPath. 
file:///C:/xslt/planner.xsl; Line #33; Column #68; Variable idgen is directly or indirectly referencing itself! 
file:///C:/xslt/planner.xsl; Line #16; Column #60; javax.xml.transform.TransformerException: java.lang.ClassNotFoundException: NodeIdGen 
file:///C:/xslt/planner.xsl; Line #33; Column #68; Unknown error in XPath. 
file:///C:/xslt/planner.xsl; Line #36; Column #72; Variable idgen is directly or indirectly referencing itself! 
file:///C:/xslt/planner.xsl; Line #16; Column #60; javax.xml.transform.TransformerException: java.lang.ClassNotFoundException: NodeIdGen 
file:///C:/xslt/planner.xsl; Line #36; Column #72; Unknown error in XPath. 
file:///C:/xslt/planner.xsl; Line #39; Column #71; Variable idgen is directly or indirectly referencing itself! 
file:///C:/xslt/planner.xsl; Line #16; Column #60; javax.xml.transform.TransformerException: java.lang.ClassNotFoundException: NodeIdGen 
file:///C:/xslt/planner.xsl; Line #39; Column #71; Unknown error in XPath. 
file:///C:/xslt/planner.xsl; Line #51; Column #67; Variable idgen is directly or indirectly referencing itself! 
file:///C:/xslt/planner.xsl; Line #16; Column #60; javax.xml.transform.TransformerException: java.lang.ClassNotFoundException: NodeIdGen 
file:///C:/xslt/planner.xsl; Line #51; Column #67; Unknown error in XPath. 
file:///C:/xslt/planner.xsl; Line #57; Column #60; Variable idgen is directly or indirectly referencing itself! 
file:///C:/xslt/planner.xsl; Line #16; Column #60; javax.xml.transform.TransformerException: java.lang.ClassNotFoundException: NodeIdGen 
file:///C:/xslt/planner.xsl; Line #57; Column #60; Unknown error in XPath. 
file:///C:/xslt/planner.xsl; Line #60; Column #72; Variable idgen is directly or indirectly referencing itself! 
file:///C:/xslt/planner.xsl; Line #16; Column #60; javax.xml.transform.TransformerException: java.lang.ClassNotFoundException: NodeIdGen 
file:///C:/xslt/planner.xsl; Line #60; Column #72; Unknown error in XPath. 
file:///C:/xslt/planner.xsl; Line #65; Column #48; Variable idgen is directly or indirectly referencing itself! 
file:///C:/xslt/planner.xsl; Line #16; Column #60; javax.xml.transform.TransformerException: java.lang.ClassNotFoundException: NodeIdGen 
file:///C:/xslt/planner.xsl; Line #65; Column #48; Unknown error in XPath. 

NodeIdGen 자바 클래스 I입니다 :

/** 
* Created by Zhao on 2016/8/19. 
*/ 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.stream.*; 
import java.io.FileOutputStream; 

public class xslTest { 
    // 1. Instantiate a TransformerFactory. 
    private TransformerFactory tFactory; 

    // 2. Use the TransformerFactory to process the stylesheet Source and 
    // generate a Transformer. 
    private Transformer transformer; 

    private FileOutputStream outStream; 
    // setup the input, output and xsl 
    private StreamSource xsl; 
    private StreamSource input; 
    private StreamResult output; 

    public void xslTest(String inputFile, String outputFile, String XSLFile) { 

     try { 
      tFactory = TransformerFactory.newInstance(); 

      xsl = new StreamSource(XSLFile); 
      input = new StreamSource(inputFile); 

      outStream = new FileOutputStream(outputFile); 
      output = new StreamResult(outStream); 

      transformer = tFactory.newTransformer(xsl); 

      transformer.transform(input, output); 

     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
     System.out.printf(
       "Transform from %s to %s using %s performed", 
       inputFile, outputFile, XSLFile 
     ); 
    } 
    public static void main (String[] args) { 
     xslTest test = new xslTest(); 

     String inputFile = "C:/xslt/recommend_person.xml"; 
     String outputFile = "C:/xslt/output.xml"; 
     String XSLFile = "C:/xslt/planner.xsl"; 

     test.xslTest(inputFile, outputFile, XSLFile); 
    } 
} 

내 IDE가 같은 많은 오류가 나에게 이야기를 XSL 파일에서 사용됩니다. 변환을 수행 할 때 명령 행을 사용하면 잘 작동합니다.

+0

ClassNotFoundException은 아마도 클래스 경로에없는 것을 의미합니다. IDE 구성을 확인하십시오. 누락 된 클래스에 대한 참조를 메인 애플리케이션에서 추가하여 해당 애플리케이션이 선택되었는지 확인하십시오. –

+0

@MichaelKay 감사합니다! 그것은 작동합니다. – Zhao

답변

0

감사합니다. 문제 해결됨! 이것은 XSLT와는 아무런 관련이 없습니다. 클래스 패스 문제 : XSL 파일에 사용 된 클래스 파일을 프로젝트 클래스 경로에 추가해야한다.