Взять файл XML и файл XSL и сделать из них строку HTML? - PullRequest
3 голосов
/ 26 июля 2011

У меня есть 2 строки, XML-строка, которую я создал с использованием интерфейса Java DOM, и внешний XSL-файл, который я хочу связать с этим XML-файлом. Я пытался использовать методы преобразования Java, но без удачи (то есть я не могу найти никакого решения для этого в Интернете).

Как мне взять XML-файл и XSL-файл и сделать из них строку HTML?

То, что я пытаюсь сделать, это вставить страницу XML в мою страницу JSP.

Просто чтобы уточнить: Это делается в сервлете, а не в JavaScript.

Немного больше информации:

Я создаю XML во время выполнения в виде строки, полученный мной XSL-файл хранится на сервере, и я хочу отобразить XML-файл, измененный XSL-файлом, пользователю, когда он нажимает на определенный файл. ссылку на сайт, и я хочу встроить ее в существующую страницу JSP (чтобы сохранить стандартный вид сайта).

Это то, что у меня так далеко:

String convertedXML = new String();
TransformerFactory factory1 = 
    TransformerFactory.newInstance();
Source xsl = new StreamSource("my.xsl");
Result result11 = null;
try {
    Templates template = factory1.newTemplates(xsl);
    Transformer transformer1 = template.newTransformer();
    Source xml = new StreamSource(xmlString);
    result11 = new StreamResult(convertedXML);
    transformer1.transform(xml, result11);
} catch(Exception e) {
   System.out.println("Not Good");
}

Последняя строка перед catch выдает следующую ошибку:

javax.xml.transform.TransformerException:
java.io.FileNotFoundException: в com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler (Неизвестно Источник) в com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform (Неизвестно Источник) в controllers.UserController.schedulePage (UserController.java:394)

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Не могли бы вы поместить свой файл в WEB-INF и попробовать использовать следующее:

String path = "/WEB-INF/my.xsl";
ServletContext context = getServletContext();
InputStream xslIs = context.getResourceAsStream(filename);
Source xsl = new StreamSource(xslIs);
0 голосов
/ 11 декабря 2011

Я не знаю, получили ли вы ответ, но предоставленный код (как указано выше в mzjn) явно неверен, так как аргумент, предоставленный StreamSource, предназначен для обозначения системного идентификатора (локатора файлов ) или файл, а не строка, которая будет перезаписана. Если вы хотите записать свой вывод в строку, используйте эту конструкцию:

StringWriter writer = new StringWriter();
result11 = new StreamResult(writer);
// do your transform...
transformer1.transform(xml, result11);
// now obtain your result's output...
String out = writer.toString();

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...