Как преобразовать объект String (содержащий XML) в элемент на существующей странице JSP
В настоящее время у меня есть объект String, содержащий элементы XML:
String carsInGarage = garage.getCars();
Теперь я хочу передать эту String в качестве источника ввода/потока (или какого-то источника), но я не уверен, какой из них выбрать и как его реализовать.
Большинство решений, которые я рассмотрел, импортируют пакет: javax.xml.transform и принимают XML файл (stylerXML.xml) и выводят в HTML файл (outputFile.html) (см. код ниже).
try
{
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource("styler.xsl"));
transformer.transform(new StreamSource("stylerXML.xml"), new StreamResult(new FileOutputStream("outputFile.html")));
}
catch (Exception e)
{
e.printStackTrace();
}
Я хочу принять объект String и вывести (используя XSL) элемент на существующей странице JSP. Я просто не знаю, как это реализовать, даже посмотрев на код выше.
Может кто-нибудь проконсультироваться/помочь. Я искал высоко и низко для решения, но я просто ничего не могу вытащить.
Ответы
Ответ 1
Используйте StringReader
и StringWriter
:
try {
StringReader reader = new StringReader("<xml>blabla</xml>");
StringWriter writer = new StringWriter();
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(
new javax.xml.transform.stream.StreamSource("styler.xsl"));
transformer.transform(
new javax.xml.transform.stream.StreamSource(reader),
new javax.xml.transform.stream.StreamResult(writer));
String result = writer.toString();
} catch (Exception e) {
e.printStackTrace();
}
Ответ 2
Если в какой-то момент вы хотите, чтобы источник содержал больше одной строки, или вы не хотите генерировать элемент оболочки XML вручную, создайте документ DOM, который содержит ваш источник, и передайте его трансформатору, используя DOMSource.
Ответ 3
Это сработало для меня.
String str = "<my>xml</my>"
StreamSource src = new StreamSource(new StringReader(str));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Result res = new StreamResult(baos);
transformer.transform(src, res);