我可以在没有明确提供XSL文件的情况下进行XSL转换吗?

时间:2011-07-01 18:27:06

标签: java xml xslt saxon

我正在使用Transformer执行从XML到XHTML的XSL转换:

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
// ...
Transformer transformer = TransformerFactory.newInstance()
  .newTransformer(/* xsl */);
transformer.transform(new StreamSource(xml), new StreamResult(xhtml));

在这段代码中我应该明确提供XSL文件。在我的情况下,我不知道应该使用哪个文件。相反,我希望变换器从原始XML中的<?xsl-stylesheet?>处理指令中获取此信息。是否可以使用JDK6和Saxon?

2 个答案:

答案 0 :(得分:3)

Xalan可以做到这一点,检查this。 可能撒克逊也是javax.xml.transform.TransformerFactorygetAssociatedStylesheet

的方法

答案 1 :(得分:1)

感谢@JustYo建议,我发现它在Saxon下运作良好。

System.setProperty("javax.xml.transform.TransformerFactory", 
    "net.sf.saxon.TransformerFactoryImpl");

StreamSource xmlSource = new StreamSource(xml);
TransformerFactory factory = TransformerFactory.newInstance();
Source xslSource = factory.getAssociatedStylesheet(xmlSource, null, null, null);
Transformer transformer = factory.newTransformer(xslSource);
transformer.transform(xmlSource, new StreamResult(xhtml));