Xalan
的简单性很吸引人,但是
如何使用saxon
和xml
文件从xsl
执行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))));
}
}
从字面上讲,这并不简单,我很高兴能够处理文件。我对saxon
中的CLI
做了一些类似的操作,但是可能忽略了类似的文档,对于上述saxon
的{{1}},文件是在运行时加载的,时间。
答案 0 :(得分:2)
您使用的API是JAXP,并且由Saxon和Xalan支持:您只需要确保Saxon的TransformerFactory实现在类路径上即可。
的确,此API很简单,但出于某些目的,它太简单了。例如:
它不支持XSLT 2.0和3.0功能,例如模式识别,流式传输,多个输出文档
不允许参数与所有数据类型一起提供
它没有提供任何方式来提供相同的文档作为多个转换的输入(您可以尝试以DOM的形式提供它,但这与XSLT的匹配度很差,甚至也不是线程安全的)
由于这些原因,Saxon还提供了自己的API,称为s9api。做一些非常简单的事情要复杂一些,但是它要更全面,更强大。