我试图将此命令行代码(通过xslt文件转换为xml并将其转换为xml)转换为Java代码: java -jar saxon9he.jar -xsl:" csv2xml.xslt" flatfile = input.csv -s:dummy.xml> output.txt的
//使用Saxon-HE 9.5的Java代码: public static void transformFileUsingStyleSheet(String csvFile,String xslID) 抛出TransformerException {
// Create a transform factory instance.
TransformerFactory tfactory = TransformerFactory.newInstance();
// Create a transformer for the stylesheet.
Transformer transformer =
tfactory.newTransformer(new StreamSource(xslID));
// Transform the source XML to System.out.
transformer.transform(new StreamSource(csvFile),
new StreamResult(new File("ConvertedCSV2XML.xml")));
}
但是我在调用上面的java方法时遇到了这个错误: SXXP0003:XML解析器报告错误:prolog中不允许内容,如下所示:transformFileUsingStyleSheet(" input的.csv"" csv2xml.xslt.xslt&#34);
答案 0 :(得分:0)
您发布的命令行表明Xslt在运行转换之前需要设置一个名为flatfile
的参数,因此请确保您在Java代码中也这样做,transformer.setParameter("flatfile", csvFile)
。正如在注释中已经指出的那样,命令行传入一个dummy.xml Xml输入文档,如果你想使用Transformer API你也需要这样做,所以确保传入第三个参数{{1}用例如inputFile
然后使用dummy.xml
作为转换方法的第一个参数。
但请注意,Saxon拥有自己的Api,允许您运行以命名模板开头的样式表,而无需虚拟XML输入文件。
答案 1 :(得分:0)
JAXP转换API是为XSLT 1.0设计的,它需要XML文档作为主要源文档。您需要提供一个虚拟源文档(XML)来满足API,或者使用Saxon的s9api API来完全访问XSLT 2.0(和XSLT 3.0)功能。