难以在java代码中使用saxon进行.sch到.xsl的转换

时间:2014-10-02 12:00:02

标签: saxon

我正在尝试使用saxon进行schematron验证。 首先,我想将.sch文件编译成.xsl。稍后,我想用首先生成的.xsl文件验证.xml文件。

我发现saxon的命令行用法如下。我成功地使用了它们。 但我需要使用java代码进行这些操作。 我尝试了一些类似下面的代码,但我没想到如何将sch扩展文件作为参数(edefter_yevmiye.sch)和iso_svrl_for_xslt2.xsl放入代码中。 我搜索了互联网,但没有找到足够的信息。 是否有用于将.sch转换为.xsl的示例Java代码,或者您可以指导我吗?

我的java代码

    **Compiling   .sch to .xsl**

             net.sf.saxon.s9api.Processor processor1 = new net.sf.saxon.s9api.Processor(false);
             net.sf.saxon.s9api.XsltCompiler xsltCompiler1 = processor1.newXsltCompiler();

             xsltCompiler1.setXsltLanguageVersion("2.0");
             xsltCompiler1.setSchemaAware(true);

             net.sf.saxon.s9api.XsltExecutable xsltExecutable1 = xsltCompiler1.compile(new StreamSource(new FileInputStream(new File("File1.xsl"))));

             net.sf.saxon.s9api.XsltTransformer xsltTransformer1 = xsltExecutable1.load();
             xsltTransformer1.setSource(new StreamSource(new FileInputStream(new
                      File("File2.sch"))));


   **Validation**

             net.sf.saxon.s9api.Processor processor2 = new net.sf.saxon.s9api.Processor(false);
             net.sf.saxon.s9api.XsltCompiler xsltCompiler2 = processor2.newXsltCompiler();

             xsltCompiler2.setXsltLanguageVersion("2.0");
             xsltCompiler2.setSchemaAware(true);

             net.sf.saxon.s9api.XsltExecutable xsltExecutable2 = xsltCompiler2.compile(new StreamSource(new
                      FileInputStream(new File(“File1.xslt"))));

             net.sf.saxon.s9api.XsltTransformer xsltTransformer2 = xsltExecutable2.load();
             xsltTransformer2.setSource(new StreamSource(new FileInputStream(new
                      File("src.xml"))));

             net.sf.saxon.s9api.Destination dest2 = new Serializer(System.out);
             xsltTransformer2.setDestination(dest2);


             xsltTransformer1.setDestination(xsltTransformer2);
             xsltTransformer1.transform();

命令行用法

编译:

java -jar saxon9he.jar -o:output.xsl -s:some.sch iso_svrl_for_xslt2.xsl

验证

java -jar saxon9he.jar -o:warnings.xml -s:some.xml output.xsl

1 个答案:

答案 0 :(得分:0)

您正在使用第二个转换作为第一个转换的目标,但这意味着第一个转换的输出将用作第二个转换的源文档,而您想要使用它作为样式表第二次转型。

执行此操作的最简单方法可能是为第一个转换设置XdmDestination,然后使用此目标对象执行destination.getXdmNode()。asSource()以获取第二个的compile()方法的输入转化