如何使用Java代码和Saxon-HE Saxon-HE-9.5.1-5通过XSLT文件将csv转换为xml

时间:2014-07-02 18:54:38

标签: xslt csv saxon

我试图将此命令行代码(通过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);

2 个答案:

答案 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)功能。