Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用来自Saxon的XML和XSL文件_Java_Xml_Xslt_Xsd_Saxon - Fatal编程技术网

Java 使用来自Saxon的XML和XSL文件

Java 使用来自Saxon的XML和XSL文件,java,xml,xslt,xsd,saxon,Java,Xml,Xslt,Xsd,Saxon,Xalan的简单性非常吸引人,但是 如何使用xml和xsl文件从saxon执行简单转换 package xalan; import java.io.File; import java.io.FileOutputStream; import java.net.URI; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.s

Xalan的简单性非常吸引人,但是 如何使用
xml
xsl
文件从
saxon
执行简单转换

package xalan;

import java.io.File;
import java.io.FileOutputStream;
import java.net.URI;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XalanTransform {

    public XalanTransform() {
    }

    public void transform(URI xml, URI xsl, URI out) throws Exception {
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer(new StreamSource(new File(xsl)));
        transformer.transform(new StreamSource(new File(xml)), new StreamResult(new FileOutputStream(new File(out))));
    }

}

这简直是再简单不过了,我很感激能够处理文件。我在
CLI
中对
saxon
做了一些类似的操作,但是我可能忽略了类似的文档,如上面的
saxon
Java
在运行时加载文件。

您使用的API是JAXP,Saxon和Xalan都支持它:您只需要确保Saxon对TransformerFactory的实现位于类路径上

这个API确实很简单,但出于某些目的,它太简单了。例如:

  • 它不支持XSLT2.0和3.0特性,例如模式感知、流式处理、多输出文档

  • 它不允许为参数提供完整的数据类型

  • 它没有提供任何方法将同一文档作为输入提供给多个转换(您可以尝试将其作为DOM提供,但这不适合XSLT,而且它甚至不是线程安全的)


出于这些原因,Saxon还提供了自己的API s9api。对于做非常简单的事情来说,它稍微复杂一点,但是它更全面、更强大。

您是否尝试阅读过Saxon文档()?Saxon提供了两个接口,它自己的s9api,但为了兼容性,它还实现了JAXP转换API(它与Xalan无关,而是以前的SUN和现在的Oracle JRE API的一部分),因此将Saxon 9放在类路径上,上面的代码应该运行Saxon.found,我认为是使用资源包。我会尽可能地看一看,下载页面上的所有示例都位于您可以在那里找到的参考资料zip中,它也位于Sourceforge和存储库中