2013-05-23 6 views
0

Я пытаюсь создать HTML-файлы с помощью XSLT, я использовал файлы xml и xsl для создания HTML-файла. Здесь некоторые другие файлы xsl, которые находятся в одном месте, включены в файл xsl, используя <xsl:include href="temp.xsl"/>.Ошибка при загрузке XSL-файлов и DTD-файлов при преобразовании XSLT

Здесь файлы Xsl находятся в пути "D:/XSL_Folder /". Я запускаю файл Main.java, который находится в D:/Workspace/Webapp_Project/path.

Когда я пытаюсь создать файлы HTML с помощью передачи файлов «D: /XSL_Folder/root.xsl» и «D: /XML_Folder/data.xml» в Main.java в качестве аргументов, я получаю следующую ошибку при создании Шаблоны.

Templates lTemplates = TransformerFactory.newInstance().newTemplates(new StreamSource(new FileInputStream(lFileXSL))); 

ERROR: 'D:\Workspace\Webapp_Project\temp.xsl (The system cannot find the file specified)'
FATAL ERROR: 'Could not compile stylesheet'
12:20:07 ERROR f.s.t.v.v2.dao.impl.DocUnitDaoImpl - Error while creating a new XslTransformerGetter. The path to the XSL may be wrong. javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet at 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(); 
     } 
} 
+0

Еще одно замечание - ваше сообщение об ошибке ищет файл temp.xsl вместо файла root.xsl. Есть ли какой-либо другой параметр или жестко закодированная информация? –

+0

@Navin Rawat temp.xsl файл включен в файл root.xsl с помощью «". Файлы root.xsl и temp.xsl расположены на одном пути (D:/XSL_Folder /). Я передаю root.xsl в xslt для translataion, но parser ищет файл temp.xsl в другом пути (то есть ERROR: 'D: \ Workspace \ Webapp_Project \ temp.xsl (система не может найти указанный файл)'). –

+0

Убедитесь, что оба файла находятся на одном пути. Это единственный файл, который вы включили в основной файл XSLT? Какую версию XSLT вы используете? –

ответ

0

Вы помечен вопрос «Saxon», и вы сказали, что вы используете XSLT 2.0, но сообщения об ошибках показать, что вы используете Xalan. Если вы специально хотите использовать Saxon, лучшим способом будет избежать использования метода JAXP для поиска по классам и непосредственного создания Saxon - вместо TransformerFactory.newInstance() используйте новый net.sf.saxon.TransformerFactory().

Поставка файла в качестве аргумента для StreamSource должна быть в порядке; но я хотел бы посмотреть, как создается объект File lXSLFile. Мое подозрение было бы в том, что вы сделали что-то вроде нового файла («root.xsl»), и оно было разрешено относительно текущего каталога.

0

Чтобы избежать этой проблемы, вы можете использовать <xsl:include href="resolve-uri('temp.xsl')"/> вместо <xsl:include href="temp.xsl"/>.

 Смежные вопросы

  • Нет связанных вопросов^_^