Java 使用来自Saxon的XML和XSL文件
Xalan的简单性非常吸引人,但是 如何使用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
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和存储库中