2011-04-25 9 views
6

में एचटीएमएल टैग स्टोर करें मेरे पास एक स्ट्रिंग है जिसमें विभिन्न HTML टैग के साथ HTML प्रारूप है। मैं इस स्ट्रिंग को एक्सएमएल टैग्स में रखना चाहता हूं जैसे कि एचटीएमएल टैग रहें। जैसेएक्सएमएल

public class XMLfunctions { 

    public final static Document XMLfromString(String xml){ 

     Document doc = null; 

     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
       try { 

      DocumentBuilder db = dbf.newDocumentBuilder(); 

      InputSource is = new InputSource(); 
      is.setCharacterStream(new StringReader(xml)); 
      doc = db.parse(is); 

     } catch (ParserConfigurationException e) { 
      System.out.println("XML parse error: " + e.getMessage()); 
      return null; 
     } catch (SAXException e) { 
      System.out.println("Wrong XML file structure: " + e.getMessage()); 
         return null; 
     } catch (IOException e) { 
      System.out.println("I/O exeption: " + e.getMessage()); 
      return null; 
     } 

      return doc; 

    } 


    /** Returns element value 
     * @param elem element (it is XML tag) 
     * @return Element value otherwise empty String 
     */ 
    public final static String getElementValue(Node elem) { 
     Node kid; 
     if(elem != null){ 
      if (elem.hasChildNodes()){ 
       for(kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling()){ 
        if(kid.getNodeType() == Node.TEXT_NODE ){ 
         return kid.getNodeValue(); 
        } 
       } 
      } 
     } 
     return ""; 
    } 

    /*Start Parsing Body */ 
    public static String getBodyXML(String id){  
      String line = null; 
      try { 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost("http://192.168.1.44:9090/solr/core0/select/?q=content_id:"+id+"&version=2.2&start=0&rows=10&indent=on"); 
       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       line = EntityUtils.toString(httpEntity); 

      } catch (UnsupportedEncodingException e) { 
       line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
      } catch (MalformedURLException e) { 
       line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
      } catch (IOException e) { 
       line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
      } 
      String st= ParseXMLBodyNode(line,"doc"); 
      return st; 

    } 

    public static String ParseXMLBodyNode(String str,String node){ 
     String xmlRecords = str; 
     String results = ""; 
     String[] result = new String [1]; 
     StringBuffer sb = new StringBuffer(); 
     StringBuffer text = new StringBuffer(); 
     try { 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      InputSource is = new InputSource(); 
      is.setCharacterStream(new StringReader(xmlRecords)); 
      Document doc = db.parse(is); 
      NodeList indiatimes1 = doc.getElementsByTagName(node); 
      sb.append("<results count="); 
      sb.append("\"1\""); 
      sb.append(">\r\n"); 

      for (int i = 0; i < indiatimes1.getLength(); i++) { 
       Node node1 = indiatimes1.item(i); 
       if (node1.getNodeType() == Node.ELEMENT_NODE) { 
        Element element = (Element) node1; 
        NodeList nodelist = element.getElementsByTagName("str"); 
        Element element1 = (Element) nodelist.item(0); 
        NodeList title = element1.getChildNodes(); 
        title.getLength(); 
        for(int j=0; j<title.getLength();j++){ 
         text.append(title.item(j).getNodeValue()); 
        } 
        System.out.print((title.item(0)).getNodeValue()); 
        sb.append("<result>\r\n"); 
         sb.append("<body>"); 
         String tmpText = html2text(text.toString()); 
          sb.append("<![CDATA[<body>"); 
          sb.append(tmpText); 
          sb.append("</body>]]>"); 
         sb.append("</body>\r\n"); 
        sb.append("</result>\r\n"); 
        result[i] = title.item(0).getNodeValue(); 
       } 
      } 
      sb.append("</results>"); 
     } catch (Exception e) { 
      System.out.println("Exception........"+results); 
      e.printStackTrace(); 
     } 
     return sb.toString(); 
    } 
    /*End Parsing Body*/ 


    public static int numResults(Document doc){  
     Node results = doc.getDocumentElement(); 
     int res = -1; 
     try{ 
      res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue()); 
     }catch(Exception e){ 
      res = -1; 
     } 
     return res; 
    } 

    public static String getValue(Element item, String str) {  
     NodeList n = item.getElementsByTagName(str);   
     return XMLfunctions.getElementValue(n.item(0)); 
    } 


    public static String html2text(String html) { 

     String pText = Jsoup.clean(html, Whitelist.basic()); 
     return pText; 
    } 

} 

मैं की तरह

String xml = XMLfunctions.getBodyXML(id); 

Document doc = XMLfunctions.XMLfromString(xml); 

मैं कि font टैग एक्सएमएल में HTML टैग के रूप में वहाँ होना चाहते हैं इन फ़ंक्शन को कॉल करें।

सहायता की सराहना की जाएगी !!!!!

उत्तर

11

एक CDATA section तो यह आपके XML के हिस्से के रूप में व्यवहार किया जाता नहीं प्राप्त करता है में अपने HTML संलग्न करें, लेकिन इसके बजाय सिर्फ सामान्य पाठ:

<result> 
<![CDATA[ 
    <body><font size="2px" face="arial">Hello World</font></body> 
]]> 
</result> 

अद्यतन

आपकी समस्या शायद यहाँ है:

y आसपास
sb.append("<result>\r\n"); 
    sb.append("<body>"); 
    String tmpText = html2text(text.toString()); 
     sb.append("<![CDATA[<body>"); 
     sb.append(tmpText); 
     sb.append("</body>]]>"); 
    sb.append("</body>\r\n"); 
sb.append("</result>\r\n"); 

सूचना sb.append("<body>"); और sb.append("</body>\r\n"); लाइनों हमारे सीडीएटीए अनुभाग, वे शायद आपके एक्सएमएल के साथ समस्या को सही ढंग से पढ़ा नहीं जा रहे हैं। , यह होना चाहिए की तरह sb.append ("! <[CDATA ["):

sb.append("<result>\r\n"); 
    String tmpText = html2text(text.toString()); 
    sb.append("<![CDATA[<body>"); 
    sb.append(tmpText); 
    sb.append("</body>]]>"); 
sb.append("</result>\r\n"); 
+0

@BoltClock: हो सकता है कि आप उन दो पंक्तियों तो यह इस तरह दिखता है निकाल देना चाहिए sb.append (tmpText); sb.append ("]]>"); या कुछ और – ReNa

+0

मुझे समझ में नहीं आता है। क्या आप 'स्ट्रिंगबिल्डर' या कुछ का उपयोग करके एक्सएमएल बना रहे हैं? – BoltClock

+0

@ बोल्टक्लॉक: सबसे पहले मैं xsoup मूल() विधि का उपयोग करके एक एक्सएमएल पार्स करता हूं, मैं अपनी सभी स्वरूपण को एक स्ट्रिंग में रखता हूं, फिर मैं स्ट्रिंगबफर को अपनी पिछली टिप्पणी में पूछने के तरीके को जोड़ता हूं और एक एक्सएमएल बनाता हूं, यह एक्सएमएल फिर से है पार्स। इस समय मुझे cdata का उपयोग करने के बाद भी कुछ भी नहीं मिला है। – ReNa