簡體   English   中英

在XML中顯示cdata以呈現為html

[英]displaying cdata in XML to be rendered as html

我知道類似的問題已經問了很多遍,但是我找不到適合我情況的解決方案。

我正在使用java(StringBuffer)在XML內生成CData部分,並放入一個簡單的HTML代碼,如下所示:

   public String createXML(OrderDetailBean orderBean) throws ParserConfigurationException {
        logger.info("Starting to Create the XML");
        getConnectionProperties(); //Load properties file and set the Connection parameters 

        // Create document
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = dbf.newDocumentBuilder();
        Document doc = builder.newDocument();

        //Configuring the Factory to get a validating parser (ie one that understands name and spaces)
        dbf.setNamespaceAware(true); 
        dbf.setValidating(true); 

        //Create doc type
        DOMImplementation domImpl = doc.getImplementation();
        DocumentType doctype = domImpl.createDocumentType("paymentService", "-//CompanyName//DTD CompanyName PaymentService v1//EN", "http://dtd.CompanyName.com/Service_v1.dtd");
        doc.appendChild(doctype);

        /******** Add ROOT element: PaymentService ********/
        Element rootElement = doc.createElement("paymentService");              
        //Add Attributes to the Root Element
        rootElement.setAttribute("version", "1.4");
        rootElement.setAttribute("Code", Code);

        /******** Add first element: submit ********/
        Element elementSubmit = doc.createElement("submit");

        /******** Add second element: order *******/
        Element elementOrder = doc.createElement("order");
        elementOrder.setAttribute("orderCode", ""+System.currentTimeMillis());

        // Add THIRD child element for CData 
        Element elementOrderContent = doc.createElement("orderContent");    
        StringBuffer orderContent = new StringBuffer();
        orderContent.append("<![CDATA[<center><table> <tr><td class=\"one width190\" align=\"left\" valign=\"top\">");
        orderContent.append("<span style=\" font-family: Arial, Helvetica, sans-serif; font-size: 12pt; color: #002469;\">");
        orderContent.append("Product:</span>&nbsp;&nbsp;</td><tr><td class=\"one\" align=\"left\" valign=\"top\"><span style=\" font-family: Arial, Helvetica, sans-serif; font-size: 12pt; color: #002469;\">");       
        orderContent.append("<strong>Product title</strong></span></td></tr> </table></center>]]>");
        logger.info("The orderContent Element in XML : "+orderContent.toString());
        Text orderContentText = doc.createTextNode(orderContent.toString());    
        logger.debug("Converted Text for Order Content is: "+orderContentText);
        elementOrderContent.appendChild(orderContentText);

        elementOrder.appendChild(elementOrderContent); //Add third Order Child: OrderContent

        elementSubmit.appendChild(elementOrder); //Add Order Element to Submit
        rootElement.appendChild(elementSubmit); //Add First Element (Submit) to Root Element (PaymentService)

        doc.appendChild(rootElement); //Add Root Element to XML Doc

        String stringXML = convertDocintoString(doc);  //print the XML to File      
        logger.info("The XML Generated is:  " + stringXML);
        return stringXML;
    }

這部分很好。 然后,我使用XMLSerializer將該XML(XML Document)轉換為String,如下所示:

/*
     * Convert the XML Document into a String: Serialize DOM Document to generate the xml String 
     */
    public String convertDocintoString(Document doc) {
        logger.info("Converting the XML Document into String XML");
        //OutputFormat format = new OutputFormat(doc);
        OutputFormat format = new OutputFormat(doc, "UTF-8", true);
        //format.setIndenting(true);        
        XMLSerializer serializer;
        String outXML = null;

        try {
            StringWriter stringOut = new StringWriter ();
            serializer = new XMLSerializer(stringOut, format);
            serializer.asDOMSerializer();
            serializer.serialize(doc);
            outXML = stringOut.toString();
            logger.debug("The XML String IS: " + outXML);
        } 
        catch (FileNotFoundException e) {
            e.printStackTrace();
            logger.debug("XML Document Not Found for Serialization!", e);
        }
        catch (IOException e) {
            e.printStackTrace();
            logger.debug((new StringBuilder("Issues when converting the XML Document into String XML")).append(e).toString());
        }
        return outXML;
    }

在上述步驟中,我注意到所有的<<和'>'標記都被&lt;替換&lt; &gt; 但是我相信這是正常的。

現在,當我嘗試在HTML頁面中顯示該CData塊時,該CData塊被呈現為實際文本而不是實際HTML,即正好是我上面粘貼的第一個代碼塊。有人可以建議這里發生了什么以及什么我做錯了嗎? HTML輸出為:

<html lang="en">

<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  <META http-equiv='Pragma' content='no-cache'>
  <META http-equiv='Expires' content='0'>
  <title>Select Method</title>
    <style type="text/css" media="screen"> @import url(/pictures/dispatcher.css);</style>
    <script type="text/javascript" src="/jsp/js/jquery-1.6.2.min.js"></script>

</head>

<body >

    <div id="ordercontainer"><font ><b>Your Details</b></font>
    <br/><font >&lt;![CDATA[&lt;input type=&quot;hidden&quot; name=&quot;MC_mycustomvar&quot; value=&quot;M_ and MC_ combined&quot;&gt;&lt;center&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;one width190&quot; align=&quot;left&quot; valign=&quot;top&quot;&gt;&lt;span style=&quot; font-family: Arial, Helvetica, sans-serif; font-size: 12pt; color: #002469;&quot;&gt;Product:&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;tr&gt;&lt;td class=&quot;one&quot; align=&quot;left&quot; valign=&quot;top&quot;&gt;&lt;span style=&quot; font-family: Arial, Helvetica, sans-serif; font-size: 12pt; color: #002469;&quot;&gt;&lt;strong&gt;Product title&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;]]&gt;</font><br/>

</body>
</html>

謝謝

您需要使用方法org.w3c.dom.Document.createCDATASection(String data)

您在data參數中傳遞的所有內容都應包裝在結果節點中的CDATA中。

    // Add THIRD child element for CData 
    Element elementOrderContent = doc.createElement("orderContent");    
    StringBuffer orderContent = new StringBuffer();
    // Note: Removed the <![CDATA[ ]]> from this string concat
    orderContent.append("<center><table> <tr><td class=\"one width190\" align=\"left\" valign=\"top\">");
    orderContent.append("<span style=\" font-family: Arial, Helvetica, sans-serif; font-size: 12pt; color: #002469;\">");
    orderContent.append("Product:</span>&nbsp;&nbsp;</td><tr><td class=\"one\" align=\"left\" valign=\"top\"><span style=\" font-family: Arial, Helvetica, sans-serif; font-size: 12pt; color: #002469;\">");       
    orderContent.append("<strong>Product title</strong></span></td></tr> </table></center>");
    logger.info("The orderContent Element in XML : "+orderContent.toString());
    // HERE IS THE UPDATED LINE
    Text orderContentText = doc.createCDATASection(orderContent.toString());    
    logger.debug("Converted Text for Order Content is: "+orderContentText);
    elementOrderContent.appendChild(orderContentText);

    elementOrder.appendChild(elementOrderContent); //Add third Order Child: OrderContent

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM