首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java执行XSLT,它调用Java函数

使用Java执行XSLT,它调用Java函数
EN

Stack Overflow用户
提问于 2016-08-19 23:06:52
回答 1查看 512关注 0票数 2

我是XSLT新手。以前,我习惯于使用命令行来执行XSLT。就像这样:

代码语言:javascript
复制
@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文件中调用Java函数。但是现在我想在Java程序中做同样的事情,我编写了这样的程序:

代码语言:javascript
复制
/**
 * 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告诉我有许多错误,例如:

代码语言:javascript
复制
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是我在XSL文件中使用的Java类。当我使用命令行进行转换时,它工作得很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-20 15:18:14

谢谢大家。问题解决了!这与XSLT无关。只是类路径问题:您需要将XSL文件中使用的类文件添加到项目类路径中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39048804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档