Ausnahmebedingung beim Ausführen der XSLT-Transformation durch Java [duplizieren]

Diese Frage ist ein genaues Duplikat von:

Getting Fehler in der XSLT-Transformation durch Java 1 Antwort

Ich habe die Java-Klasse unten, in der ich jetzt Xstream Rite verwende, wie Sie sehen können, dass ich in der Java-Klasse unten XML aus dem Objekt generiere.

InvoiceReferenceNotificationMessage invoiceReferenceNotificationMessage = new InvoiceReferenceNotificationMessage();
        invoiceReferenceNotificationMessage.setInvoiceReference("SM/829709/0315");
        invoiceReferenceNotificationMessage.setABSReference("IRMAR157311");
        invoiceReferenceNotificationMessage.setCurrency("GBP");
        invoiceReferenceNotificationMessage.setInvoiceAmount(2546);
        invoiceReferenceNotificationMessage.setPaidAmount(1245);
        invoiceReferenceNotificationMessage.setBalanceAmount(0);
        invoiceReferenceNotificationMessage.setValueDate(new Date());
        invoiceReferenceNotificationMessage.setRemarks("abc");


        InvoiceReferenceNotificationMessage invoiceReferenceNotificationMessage1 = new InvoiceReferenceNotificationMessage();
        invoiceReferenceNotificationMessage1.setInvoiceReference("SM/15");
        invoiceReferenceNotificationMessage1.setABSReference("I157311");
        invoiceReferenceNotificationMessage1.setCurrency("EUR");
        invoiceReferenceNotificationMessage1.setInvoiceAmount(255546);
        invoiceReferenceNotificationMessage1.setPaidAmount(125545);
        invoiceReferenceNotificationMessage1.setBalanceAmount(0);
        invoiceReferenceNotificationMessage1.setValueDate(new Date());
        invoiceReferenceNotificationMessage1.setRemarks("abERRc");


        Mail m = new Mail();
        String xslFilePath1 = "C:\\xsl\\rok.xsl";

        m.setInvoiceReferenceNotificationMessage(invoiceReferenceNotificationMessage);
        XStream xstream = new XStream();
        xstream.alias("arokermail",Mail.class);
        String abc = xstream.toXML(m);


        m.setInvoiceReferenceNotificationMessage(invoiceReferenceNotificationMessage1);
        xstream.alias("arokermail",Mail.class);
        String def = xstream.toXML(m);

        String t =abc+def;

so der obige Code erzeugt die folgende xml

        <arokermail>
  <invoiceReferenceNotificationMessage>
    <InvoiceReference>SM/829709/0315</InvoiceReference>
    <ABSReference>IRMAR157311</ABSReference>
    <Currency>GBP</Currency>
    <InvoiceAmount>2546.0</InvoiceAmount>
    <PaidAmount>1245.0</PaidAmount>
    <BalanceAmount>0.0</BalanceAmount>
    <ValueDate>2015-05-22 15:44:14.741 IST</ValueDate>
    <Remarks>abc</Remarks>
  </invoiceReferenceNotificationMessage>
</arokermail><arokermail>
  <invoiceReferenceNotificationMessage>
    <InvoiceReference>SM/15</InvoiceReference>
    <ABSReference>I157311</ABSReference>
    <Currency>EUR</Currency>
    <InvoiceAmount>255546.0</InvoiceAmount>
    <PaidAmount>125545.0</PaidAmount>
    <BalanceAmount>0.0</BalanceAmount>
    <ValueDate>2015-05-22 15:44:14.741 IST</ValueDate>
    <Remarks>abERRc</Remarks>
  </invoiceReferenceNotificationMessage>
</arokermail>

Jetzt habe ich auch eine xsl erstellt, die ich auf meinem Computer gespeichert habe. Sie heißt rok.xsl und soll als Teil der xsl-Transformation auf generierte xml angewendet werden. Die folgende xsl habe ich also in einer Variablen gespeichert, wie unten gezeigt.

String xslFilePath1 = "C:\\xsl\\rok.xsl";

Nun, bitte geben Sie an, wie diese xsl auf generierte xml angewendet werden soll. Die generierte xml wird in einer Zeichenfolgenvariablen namens t gespeichert.

String t =abc+def;

below ist, was ich versucht habe, indem ich eine Funktion aufrufe und Parameter übergebe

String t =abc+def; //generated xml
    String xslFilePath1 = "C:\\xsl\\rok.xsl";";
    String outputhtml =null;

    try
        {
            st.transform(t, xslFilePath1, outputhtml);
            }
    catch (TransformerConfigurationException e)
                {
                    System.err.println("TransformerConfigurationException");
                    System.err.println(e);
                }
                catch (TransformerException e)
                {
                    System.err.println("TransformerException");
                    System.err.println(e);
                }

und die aufgerufene Funktion wird unten angezeigt

public void transform(String dataXML, String inputXSL, String outputHTML)
                throws TransformerConfigurationException, TransformerException

        {
         TransformerFactory factory = TransformerFactory.newInstance();
            StreamSource xslStream = new StreamSource(inputXSL);
            Transformer transformer = factory.newTransformer(xslStream);
           StreamSource in = new StreamSource(dataXML);
            StreamResult out = new StreamResult(outputHTML);
            transformer.transform(in, out);
            System.out.println("The generated HTML file is:" + outputHTML);

        }






the error that i am getting is ..




    TransformerException
    javax.xml.transform.TransformerException: Result object passed to ''{0}'' is invalid.

Ich habe die XSL aktualisiert, so dass meine rok.xsl wie unten gezeigt ist.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
        <html>
            <body>
                Hello,
                <br>
                </br>
                <br>
                </br>
                Please be advised of the following payment details
                    <font color="black" face="Arial" size="2" >
                    <br>
                        <br>

                            <table border="1" cellpadding="3" cellspacing="0">
                                <tr bgcolor="lightblue">
                                     <td nowrap="nowrap">Invoice Reference</td>
                                     <td nowrap="nowrap">ABSReference</td>
                                     <td nowrap="nowrap">Currency</td>
                                     <td nowrap="nowrap">Invoice Amount</td>
                                     <td nowrap="nowrap">Paid Amount</td>
                                     <td nowrap="nowrap">Balance Amount</td>
                                     <td nowrap="nowrap">Value Date</td>
                                     <td nowrap="nowrap">Remarks</td>

                                </tr>
                                <xsl:for-each select="arokermail/invoiceReferenceNotificationMessage">
                                    <tr>
                                        <td nowrap="nowrap"><xsl:value-of select="InvoiceReference" /></td>
                                        <td nowrap="nowrap"><xsl:value-of select="ABSReference" /></td>
                                        <td nowrap="nowrap"><xsl:value-of select="Currency" /></td>
                                        <td nowrap="nowrap"><xsl:value-of select="InvoiceAmount" /></td>
                                        <td nowrap="nowrap"><xsl:value-of select="PaidAmount" /></td>
                                        <td nowrap="nowrap"><xsl:value-of select="BalanceAmount" /></td>
                                        <td nowrap="nowrap"><xsl:value-of select="ValueDate" /></td>
                                        <td nowrap="nowrap"><xsl:value-of select="Remarks" /></td>
                                        </tr>
                                </xsl:for-each>
                                <TR>

                                </TR>
                            </table>
                        </br>
                    </br>
                    <p>

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
</br>
</br>                                   
</p>
                </font>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Antworten auf die Frage(4)

Ihre Antwort auf die Frage