使用xslt转换xml时出现Java异常错误javax.xml.transform.TransformerConfigurationException

时间:2018-05-17 12:32:23

标签: java xml xslt

我使用了一个xslt来查找元素的xpath。我使用java编码运行xslt。但是我遇到了异常错误。 xslt编码如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
    <xsl:output omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
<value>
<xsl:for-each select="//section">
    <xsl:variable name="xpath-name" select="string-join((for $node in ancestor::* return $node/name(),name()),'/')"></xsl:variable>
    <path><xsl:value-of select="$xpath-name"/></path>
</xsl:for-each>
</value>
</xsl:template>
</xsl:stylesheet>

我使用的java编码如下:

package firstspring;
import java.io.File;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

    public static void main(String[] args) {
    TransformerFactory tFactory = TransformerFactory.newInstance();
            StreamSource xmlInputFile = new StreamSource("E:/test/test.xml");
            StreamSource xslTransformationFile = new StreamSource("E:/test/my.xsl");
            StreamResult xmlOutputFile = new StreamResult("E:/test/out.xml");
            try {
                Transformer transformer = tFactory
                        .newTransformer(xslTransformationFile);
                transformer.transform(xmlInputFile, xmlOutputFile);
            } catch (TransformerConfigurationException e) {
                e.printStackTrace();
            } catch (TransformerException e) {
                e.printStackTrace();
            }
            System.out.println("Done!");
try{

}
catch (Exception e) {
    // TODO: handle exception
}

    }

}

发生以下异常错误:

FATAL ERROR:  'file:///E:/test/my.xsl: line 8: Required attribute 'select' is missing.'
javax.xml.transform.TransformerConfigurationException: file:///E:/test/my.xsl: line 8: Required attribute 'select' is missing.
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(Unknown Source)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(Unknown Source)
    at firstspring.fileread.main(fileread.java:36)

请任何人帮忙:

1 个答案:

答案 0 :(得分:0)

正如@Martin Honnen的评论中已经提到的,您需要添加saxon9he.jar或其他版本的jar来支持XSLT 2.0。

查看您的Java代码,看起来您只是尝试检查转换,因为逻辑是用main方法编写的。如果此类是Java项目的一部分,则可以将jar文件依赖项添加到项目的classpath

如果该类是可部署的viz的一部分。 .war文件,然后在/WEB-INF/lib文件夹中添加jar,将处理依赖项。