У меня есть требование загрузить таблицу стилей в кеш. С помощью следующего кода для компиляции XSLT, я получаю исключение:Ошибка компиляции XSLT из Java
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);
}
}
Добро пожаловать в переполнение стека! Ваше изображение текста [не очень полезно] (// meta.unix.stackexchange.com/q/4086). Он не может быть прочитан вслух или скопирован в редактор, и он не индексируется очень хорошо, что означает, что другие пользователи с одинаковой проблемой с меньшей вероятностью найдут ответ здесь. Пожалуйста, отредактируйте свое сообщение, чтобы включить соответствующий текст напрямую (желательно с помощью copy + paste, чтобы избежать ошибок транскрипции). –
Измените ClassLoader.getSystemResourceAsStream (имя файла) на 'XSLT.class.getResourceAsStream (filename)'. – VGR
Измените 'System.out.println (e.toString());' на 'e.printStackTrace()' и обеспечите полную трассировку стека. – kgeorgiy