gpt4 book ai didi

java - Java 中的 XSLT 编译错误

转载 作者:行者123 更新时间:2023-12-02 03:14:51 24 4
gpt4 key购买 nike

我需要将样式表加载到缓存中。使用以下代码编译 XSLT,出现异常:

javax.xml.transform.TransformerConfigurationException: Failed to compile stylesheet. 1 error detected.

虽然附加了 XSLT,但 XSLT 没有错误。下面是 XSLT

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:copy-of select='.'/>
</xsl:template>
</xsl:stylesheet>

我怀疑语句 InputStream stream=ClassLoader.getSystemResourceAsStream(filename); 是否正在加载文件。

请帮我理解为什么编译失败;我没有太多 Java 经验

    package file;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import javax.xml.transform.Source;
import javax.xml.transform.Templates;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.URIResolver;
import javax.xml.transform.stream.StreamSource;

public class XSLT {

private static Map<String, Templates> templatesMap = new HashMap<String, Templates>();

public XSLT(){

}
public static void main(String[] args) throws Exception{
XSLT xs=new XSLT();
System.out.println(xs.readXSLT("/RemoveNamespaces.xslt"));
}
public String readXSLT(String filename) throws Exception{
System.setProperty("javax.xml.transform.TransformerFactory","net.sf.saxon.TransformerFactoryImpl");
//String result="";
InputStream stream=XSLT.class.getResourceAsStream(filename);
TransformerFactory xformFactory=TransformerFactory.newInstance();
xformFactory.setURIResolver(new SimpleURIResolver());

Source source=new StreamSource(stream);
try{
Templates templates=xformFactory.newTemplates(source);
}
catch(TransformerConfigurationException e){
e.printStackTrace();
}
templatesMap.put(filename, xformFactory.newTemplates(source));
//return templatesMap.get(filename).toString();
return "Dummy";
}
}

class SimpleURIResolver implements URIResolver {
public Source resolve(String href, String base) throws TransformerException {
InputStream stream = ClassLoader.getSystemResourceAsStream(href);
return new StreamSource(stream);
}

}

最佳答案

第一个问题是您的代码没有输出 XSLT 编译器报告的错误。这使得很难识别错误是什么。您仅输出异常消息,表明已报告错误,这没有多大帮助。

Saxon 默认情况下将错误消息发送到标准错误输出,这可能会发送到某个日志文件中的某个地方 - 这完全取决于您运行的环境。您可以将消息发送到其他地方,例如通过编写您自己的 ErrorListener 并调用 xFormFactory.setErrorListener(); 或者您可以通过设置工厂的配置属性 http://来更改 Saxon 标准错误监听器的输出目标saxon.sf.net/feature/standardErrorOutputFile 为您想要写入消息的文件的名称。

话虽如此,我强烈怀疑这些消息只会告诉您您没有正确选择样式表文件。但修复应用程序绝对值得,这样当您将来在样式表中出错时,您就可以看到消息。

关于java - Java 中的 XSLT 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40467369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com