2016-08-19 2 views
2

Ich bin neu in XSLT. Zuvor war ich daran gewöhnt, mit der Kommandozeile XSLT auszuführen. Genau wie folgt aus:Verwenden von Java zum Ausführen von XSLT, die Java-Funktion aufruft

@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 

Das funktionierte gut, und ich war in der Lage Java-Funktionen innerhalb der planner.xsl Datei aufrufen. Aber jetzt will ich die gleiche Sache in einem Java-Programm tun, und ich schrieb Programm wie folgt:

/** 
* 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); 
    } 
} 

Meine IDE sagt mir, es gibt viele Fehler wie:

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 ist die Java-Klasse I in der XSL-Datei verwendet. Es funktioniert gut, wenn ich die Transformation mit der Befehlszeile ausführte.

+0

ClassNotFoundException bedeutet wahrscheinlich, dass sich etwas nicht in Ihrem Klassenpfad befindet. Überprüfen Sie Ihre IDE-Konfiguration. Versuchen Sie, einen Verweis auf die fehlende Klasse aus Ihrer Hauptanwendung hinzuzufügen, um zu sehen, ob diese abgeholt wird. –

+0

@MichaelKay Danke! Es klappt. – Zhao

Antwort

0

Danke an alle. Problem gelöst! Das hat nichts mit XSLT zu tun. Nur ein Klassenpfadproblem: Sie müssen die Klassendatei, die in der XSL-Datei verwendet wird, zu Ihrem Projektklassenpfad hinzufügen.

Verwandte Themen