Я пытаюсь создать файлы HTML с помощью XSLT, я использовал файлы xml и файлы xsl для создания файла HTML. Здесь некоторые другие файлы xsl, расположенные в том же месте, включаются в файл xsl с помощью <xsl:include href="temp.xsl"/>
.
Здесь файлы Xsl расположены по пути «D:/XSL_Folder/». Я запускаю файл Main.java, который находится в пути D:/Workspace/Webapp_Project/.
Когда я пытаюсь создать HTML-файлы, передавая файлы «D:/XSL_Folder/root.xsl» и «D:/XML_Folder/data.xml» в Main.java в качестве аргументов, я получаю следующую ошибку при создании шаблонов.
Templates lTemplates = TransformerFactory.newInstance().newTemplates(new StreamSource(new FileInputStream(lFileXSL)));
ОШИБКА: "D:\Workspace\Webapp_Project\temp.xsl (система не может найти указанный файл)"
НЕУСТРАНИМАЯ ОШИБКА: "Не удалось скомпилировать таблицу стилей"
12:20:07 ОШИБКА fstvv2.dao.impl .DocUnitDaoImpl — ошибка при создании нового XslTransformerGetter. Путь к XSL может быть неправильным. javax.xml.transform.TransformerConfigurationException: не удалось скомпилировать таблицу стилей на com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:885) ~[na:1.7.0_13]
В отчете об ошибке мы видим, что парсер проверяет включенный файл xsl в пути к проекту (D:\Workspace\Webapp_Project), а не в пути, где находится файл root.xsl (D:/XSL_Folder/).
Может ли кто-нибудь подсказать, почему синтаксический анализатор ищет файл xsl в папке проекта по пути, где находится файл root.xsl, и как решить эту проблему?
Код, который я использую для создания HTML-файла с использованием XSL и XML-файла:
public static void simpleTransform(InputStream lXmlFileStream, File lXSLFile,
StreamResult lHtmlResult, Map<String, String> lArguments) {
TransformerFactory tFactory = TransformerFactory.newInstance();
try {
Transformer transformer =
tFactory.newTransformer(new StreamSource(lXSLFile));
for (Entry<String, String> lEntrie : lArguments.entrySet()) {
transformer.setParameter(lEntrie.getKey(), lEntrie.getValue());
}
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.transform(new StreamSource(lXmlFileStream), lHtmlResult);
}
catch (Exception e) {
e.printStackTrace();
}
}