我有要求將樣式表加載到緩存中。用下面的代碼編譯XSLT,我得到一個異常:來自Java的XSLT編譯錯誤
javax.xml.transform.TransformerConfigurationException:無法編譯樣式表。檢測到1個錯誤。
雖然附加了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);
}
}
歡迎來到Stack Overflow!你的文字圖像[不是很有用](// meta.unix.stackexchange.com/q/4086)。它不能被朗讀或複製到編輯器中,而且它的索引也不是很好,這意味着具有相同問題的其他用戶不太可能在此找到答案。請[編輯]您的文章直接合並相關文本(最好使用複製+粘貼以避免轉錄錯誤)。 –
將ClassLoader.getSystemResourceAsStream(filename)更改爲'XSLT.class.getResourceAsStream(filename)'。 – VGR
將'System.out.println(e.toString());'改爲'e.printStackTrace()'並提供完整的堆棧跟蹤。 – kgeorgiy