我使用下面的代码从xml和xsl文件生成html。它适用于xslt 1.0,但现在我正在使用xslt 2.0。我在执行以下代码时遇到此错误:ERROR: Unsupported XSL element 'for-each-group'.'
你知道如何解决这个问题吗?
private static void createHtml(){
try {
TransformerFactory tf =TransformerFactory.newInstance();
Source xslFile =new StreamSource("test.xsl");
Source xmlFile =new StreamSource(new StringReader(xml));
String resultFile ="test.html";
OutputStream htmlFile=new FileOutputStream(resultFile );
Transformer trasform=tFactory.newTransformer(xslFile);
trasform.transform(xmlFile, new StreamResult(htmlFile));
}
catch (Exception e)
{
System.out.println("Error.");
}
}
我现在试着这样做:
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer transformer = tfactory.newTransformer(new StreamSource(new File("test.xsl")));
transformer.transform(new StreamSource(new File(xml)),
new StreamResult("test.html"));
在主要方法中:
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl")
我收到了这个错误:
Recoverable error
I/O error reported by XML parser processing
知道如何解决这个问题吗?
答案 0 :(得分:1)
您报告了两个不同的错误:
(a)错误:不支持的XSL元素'for-each-group'。'
(b)可恢复错误:XML解析器处理报告的I / O错误
你似乎不太可能从同一次运行得到这些,所以不清楚你在这些场合每次做什么来得到两个不同的错误。
第一个错误意味着由于某种原因您加载了不支持XSLT 2.0的XSLT处理器。确保加载Saxon的最安全,最快捷的方法是直接实例化它:
TransformerFactory tfactory = new net.sf.saxon.TransformerFactoryImpl();
如果您依赖JAXP机制,可能会出现各种各样的问题,而且它也可能非常慢,因为它涉及搜索类路径。
出现第二个错误,您没有提供足够的信息来提供完整的诊断。然而,消息中没有文件名的事实给出了一个线索:这意味着Saxon不知道文件名,这通常是因为你做了类似的事情:
Source xmlFile =new StreamSource(new StringReader(xml));
StringReader本身永远不会出现I / O错误。但是,如果要解析的XML包含DTD引用或对其他外部实体的引用,并且这些是相对引用,则XML解析器将无法解析它们,因为它没有基本URI可用用。您可以在StreamSource构造函数的第二个参数中提供基URI。