按元素拆分XML文件

时间:2011-02-02 10:41:39

标签: java xml xslt

这是类似的问题,几乎没有差异:

Split XML file into multiple files based on a threshold value

我的根元素称为商店,要拆分的元素称为商店。我想用xsl或不用java来做这个,这是我用来触发xsl的java代码:

public void transform(String transformator, File source, String destination) {
    try {    
        TransformerFactory tFactory = TransformerFactory.newInstance();

        Transformer transformer = tFactory.newTransformer(new StreamSource(transformatorLocation));

        try {
            transformer.transform(new StreamSource(new InputStreamReader(new FileInputStream(source), "UTF-8")), new StreamResult(new OutputStreamWriter(new FileOutputStream(destination), "UTF-8")));
        } catch (TransformerException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            System.err.println("File is missing");
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    } catch (TransformerConfigurationException e) {
        e.printStackTrace();
    }
}

我在这个问题上尝试了两种解决方案,但它们都产生错误,一种是:

  

错误:'不支持的XSL元素'http://www.w3.org/1999/XSL/Transform:for-each-group''       javax.xml.transform.TransformerException:java.lang.RuntimeException:不支持的XSL元素“http://www.w3.org/1999/XSL/Transform:for-each-group

其他是样式表无法编译。

我想要完成什么?将参数传递给java类在一个文件中需要多少个商店,并将其拆分为n个部分。

1 个答案:

答案 0 :(得分:4)

我相信for-each-group是一个XSLT 2.0构造。 java中的默认XSLT处理器尚不支持XSLT 2.0。

您需要坚持使用XSLT 1.0,或者找到一个执行2.0的XSLT处理器,然后使用它(例如,Saxon)。