使用来自 Saxon 的 XML 和 XSL 文件
using XML and XSL files from Saxon
Xalan
的简洁很吸引人,但是
我如何使用 xml
和 xsl
文件从 saxon
执行 this 简单转换?
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确实很简单,但出于某些目的,它太简单了。例如:
它不支持 XSLT 2.0 和 3.0 功能,例如模式感知、流式传输、多输出文档
不允许提供全范围数据类型的参数
它没有提供任何方法来将同一文档作为输入提供给多个转换(您可以尝试将其作为 DOM 提供,但这非常不适合 XSLT,而且它甚至不是线程安全的)
出于这些原因,Saxon 还提供了它自己的 API 称为 s9api。它做一些非常简单的事情有点复杂,但它更全面、更强大。
Xalan
的简洁很吸引人,但是
我如何使用 xml
和 xsl
文件从 saxon
执行 this 简单转换?
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确实很简单,但出于某些目的,它太简单了。例如:
它不支持 XSLT 2.0 和 3.0 功能,例如模式感知、流式传输、多输出文档
不允许提供全范围数据类型的参数
它没有提供任何方法来将同一文档作为输入提供给多个转换(您可以尝试将其作为 DOM 提供,但这非常不适合 XSLT,而且它甚至不是线程安全的)
出于这些原因,Saxon 还提供了它自己的 API 称为 s9api。它做一些非常简单的事情有点复杂,但它更全面、更强大。