2011-06-27 15 views
6

मैं विभिन्न पृष्ठों के लिए HTML उत्पन्न करने के लिए HtmlUnit का उपयोग कर रहा हूं, लेकिन अभी, सबसे अच्छा मैं पृष्ठ को कच्चे HTML में प्राप्त करने के लिए कर सकता हूं जो सर्वर लौटाता है HTML HTML को XML स्ट्रिंग में परिवर्तित करना है।HtmlUnit - एचटीएमएल पेज को एचटीएमएल स्ट्रिंग में कनवर्ट करें?

यह कुछ हद तक परेशान है क्योंकि एक्सएमएल आउटपुट कच्चे HTML की तुलना में अलग-अलग वेब ब्राउज़र द्वारा प्रदान किया जाता है। क्या XML के बजाय XML HTML को कच्चे HTML में परिवर्तित करने का कोई तरीका है?

धन्यवाद!

उत्तर

5

मैं 100% कुछ नहीं मैं सही ढंग से सवाल समझ में आ रहा है, लेकिन शायद यह आपकी समस्या का समाधान होगा:।

page.getWebResponse() getContentAsString()

+0

getWebResponse() स्क्रिप्ट द्वारा किए गए संशोधनों के बिना मूल पृष्ठ देता है। तो asxml() और asText() अंतिम पृष्ठ प्राप्त करने के लिए एक बेहतर समाधान है। – snorbi

7

page.asXml() एचटीएमएल वापस आ जाएगी। page.asText() इसे केवल पाठ पर प्रस्तुत किया जाता है।

+0

बस टेक्स्ट नोड्स के भीतर ही इस पाठ को पुष्टि करना चाहते हैं और इसमें टैग और उनके गुण शामिल नहीं हैं। –

0

मैं पृष्ठ के प्रकार पर और XmlPage और SgmlPage एक HTML तत्व पर एक innerHTML करते हैं और मैन्युअल रूप से गुण बाहर लिखना चाहिए के लिए एक स्विच की जवाब कम नहीं जानता। सुरुचिपूर्ण और सटीक नहीं है (यह कार्यप्रणाली गायब है) लेकिन यह काम करता है।

Page.getWebResponse()। GetContentAsString()

के रूप में यह मूल unrendered, कोई js बाइट्स की पाठ्य रूप देता है यह गलत है। यदि जावास्क्रिप्ट निष्पादित करता है और सामान बदलता है, तो इस विधि में परिवर्तन दिखाई नहीं देंगे।

पेज.एएसएक्सएमएल() एचटीएमएल वापस करेगा। page.asText() इसे केवल पाठ में प्रस्तुत करता है।

बस टेक्स्ट नोड्स के भीतर ही इस पाठ को पुष्टि करना चाहते हैं और इसमें टैग और उनके गुण शामिल नहीं हैं। यदि आप पूर्ण HTML लेना चाहते हैं तो यह अच्छा नहीं है।

0

हो सकता है कि आप के बजाय HtmlUnit ढांचे के तरीकों का उपयोग कर के, कुछ इस तरह साथ जाना चाहते:

try (InputStreamReader isr = new InputStreamReader(url.openConnection().getInputStream()); 
       BufferedReader br = new BufferedReader(isr);){ 

     String line =""; 
     String htmlSource =""; 

     while((line = br.readLine()) != null) 
     { 
      htmlSource += line + "\n"; 
     } 


     return htmlSource; 

     } catch (IOException e) { 
     // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
1

मुझे लगता है कि HTML के रूप में अंतिम पृष्ठ प्राप्त करने के लिए कोई सीधा रास्ता है। asXml() एक्सएमएल के रूप में परिणाम देता है, asText() निकाली गई टेक्स्ट सामग्री देता है।

सबसे अच्छा तुम कर सकते हो

asXml() का उपयोग और HTML करने के लिए "परिणत" इसे करने के लिए है:

htmlPage.asXml().replaceFirst("<\\?xml version=\"1.0\" encoding=\"(.+)\"\\?>", "<!DOCTYPE html>") 

(बेशक आप < br/> परिवर्तित <br> की तरह अधिक परिवर्तनों लागू कर सकते हैं - यह अपनी आवश्यकताओं पर निर्भर करता है)

भी related Google documentation इस दृष्टिकोण की सिफारिश की गई है (हालांकि वे किसी भी परिवर्तनों) लागू नहीं है:।

// return the snapshot 
out.println(page.asXml()); 
संबंधित मुद्दे