Получить ошибку в преобразовании xslt через Java
Я пытаюсь преобразовать xsl, который прямо сейчас с помощью Java-объекта я генерирую промежуточный XML, и этот XML снова передается для генерации нового XML, наконец, прямо сейчас, в то время как в xsl-преобразовании я получаю ошибку, позвольте мне показать вам ниже моего кусок кода, который я пробовал.
Ниже приведен мой класс, в котором я сначала создаю объекты, а затем с помощью xstream создаю промежуточный XML
InvoiceReferenceNotificationMessage invoiceReferenceNotificationMessage = new InvoiceReferenceNotificationMessage();
invoiceReferenceNotificationMessage.setInvoiceReference("SM/8315");
invoiceReferenceNotificationMessage.setABSReference("IRMA5456R157311");
invoiceReferenceNotificationMessage.setCurrency("GBP");
invoiceReferenceNotificationMessage.setInvoiceAmount(255646);
invoiceReferenceNotificationMessage.setPaidAmount(1246565);
invoiceReferenceNotificationMessage.setBalanceAmount(0);
invoiceReferenceNotificationMessage.setValueDate(new Date());
invoiceReferenceNotificationMessage.setRemarks("abc");
InvoiceReferenceNotificationMessage invoiceReferenceNotificationMessage1 = new InvoiceReferenceNotificationMessage();
invoiceReferenceNotificationMessage1.setInvoiceReference("SM/1655");
invoiceReferenceNotificationMessage1.setABSReference("I1575656311");
invoiceReferenceNotificationMessage1.setCurrency("EUR");
invoiceReferenceNotificationMessage1.setInvoiceAmount(25655546);
invoiceReferenceNotificationMessage1.setPaidAmount(1255565645);
invoiceReferenceNotificationMessage1.setBalanceAmount(0);
invoiceReferenceNotificationMessage1.setValueDate(new Date());
invoiceReferenceNotificationMessage1.setRemarks("abERRc");
Transformer xsltTransformer = null;
Mail m = new Mail();
m.setInvoiceReferenceNotificationMessage(invoiceReferenceNotificationMessage);
XStream xstream = new XStream();
xstream.alias("brokermail",Mail.class);
String abc = xstream.toXML(m);
//System.out.println(abc);
m.setInvoiceReferenceNotificationMessage(invoiceReferenceNotificationMessage1);
xstream.alias("brokermail",Mail.class);
String def = xstream.toXML(m);
//System.out.println(def);
String t =abc+def;
System.out.println(t);
Приведенный выше код генерирует следующий XML
<brokermail>
<invoiceReferenceNotificationMessage>
<InvoiceReference>SM/82973409/0315</InvoiceReference>
<ABSReference>IRMAR43157311</ABSReference>
<Currency>GBP</Currency>
<InvoiceAmount>25446.0</InvoiceAmount>
<PaidAmount>12435.0</PaidAmount>
<BalanceAmount>0.0</BalanceAmount>
<ValueDate>2015-05-21 21:58:04.439 IST</ValueDate>
<Remarks>abc</Remarks>
</invoiceReferenceNotificationMessage>
</brokermail><brokermail>
<invoiceReferenceNotificationMessage>
<InvoiceReference>SM/13435</InvoiceReference>
<ABSReference>I157343411</ABSReference>
<Currency>EUR</Currency>
<InvoiceAmount>2554546.0</InvoiceAmount>
<PaidAmount>12534545.0</PaidAmount>
<BalanceAmount>0.0</BalanceAmount>
<ValueDate>2015-05-21 21:58:04.439 IST</ValueDate>
<Remarks>abERRc</Remarks>
</invoiceReferenceNotificationMessage>
</brokermail>
Теперь мне нужно выполнить xsl-преобразование, которое проходит через сгенерированный выше XML и затем генерирует новый XML, который я делаю через xalan. Ниже я попробовал, но мой окончательный XML не генерируется, так как я получаю сообщение об ошибке, пожалуйста, посоветуйте, как преодолеть это, я использую xalan api
System.out.println("******%%%%%%%%%%%%%*************");
String t =abc+def;
System.out.println(t);
Source msgStreamSource = null;
ByteArrayInputStream byteStream = new ByteArrayInputStream(t.getBytes());
BufferedInputStream buffMsg = new BufferedInputStream(byteStream);
msgStreamSource = new StreamSource(buffMsg);
Transformer xsltTransformer1 = null;
StringWriter strWriter = new StringWriter();
// Result stream
Result xmlOutput = new StreamResult(strWriter);
// String to hold transformed xml
String transformedMessage = null;
TransformerFactory transFact = TransformerFactory.newInstance();
try
{
//*******#########****** error is on this below line ********###########***********
xsltTransformer1 = transFact.newTransformer(msgStreamSource);
//*******#########****** error is on this below line ********###########***********
// perform XSL transformation
xsltTransformer1.transform(msgStreamSource, xmlOutput);
// get the transformed xml
transformedMessage = strWriter.toString();
}
finally
{
strWriter.close();
}
System.out.println(transformedMessage);
}
ошибка, которую я получаю, пожалуйста, посоветуйте, как преодолеть это
[Fatal Error] :12:15: The markup in the document following the root element must be well-formed.
ERROR: 'The markup in the document following the root element must be well-formed.'
FATAL ERROR: 'Could not compile stylesheet'
Exception in thread "main" javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(Unknown Source)
1 ответ
Вы передаете XML (недопустимый документ с 2 корневыми элементами) newTransformer
вместо передачи таблицы стилей XSLT. Компилятор даже не жалуется на то, что документ не является допустимой таблицей стилей, он жалуется, что это некорректно сформированный XML (таблица стилей XSLT сама по себе является XML-документом). Вы должны прочитать TransformerFactory
Документация, я боюсь.