2011-10-19 18 views
5

के साथ एचटीएमएल पार्सिंग मैं SAX पार्सर का उपयोग कर सामान्य HTML फ़ाइल को पार्स करने का प्रयास कर रहा हूं।SAX पार्सर

SAXBuilder builder2 = new SAXBuilder(); 
     try { 
      Document sdoc = (Document)builder2.build(readFile); 
      NodeList nl=sdoc.getElementsByTagName("body"); 
      System.out.println("nodelist>>>>>>>>>>>"+nl.getLength()); 

     } catch (JDOMException e1) { 
      e1.printStackTrace(); 
     } 

लेकिन मैं अपवाद

Open quote is expected for attribute "{1}" associated with an element type "class". 

किसी को भी मुझे बता सकते हैं क्यों मैं इस अपवाद हो रही हो रही है, एचटीएमएल दस्तावेज़ में अच्छी तरह से बनाई है और यह सब खुले और बंद टैग ठीक है।

अग्रिम धन्यवाद।

+0

क्या कोई विशिष्ट कारण है कि आप SAX के साथ ऐसा क्यों करना चाहते हैं? – flash

+0

नहीं, बस शरीर की सामग्री को HTML फ़ाइल से प्राप्त करना चाहते हैं, इसलिए, मैंने इसका इस्तेमाल किया। क्या कोई अन्य समाधान है? – user972590

+1

SAX के साथ आप एक्सएचटीएमएल का विश्लेषण कर सकते हैं, लेकिन मुझे यकीन नहीं है कि यह HTML को भी पार्स कर सकता है (कम से कम अधिकांश एक्सएमएल पार्सर नहीं)। एचटीएमएल एक अच्छी तरह से गठित एक्सएमएल होना जरूरी नहीं है। –

उत्तर

2

कृपया HtmlParser पर एक नज़र डालें। आम तौर पर सैक्स एचटीएमएल पार्स करने के लिए एक अच्छा समाधान नहीं है।

+2

SAX हमेशा बड़ी मात्रा में डेटा को पार्स करने के लिए एक अच्छा विकल्प है - जैसे HTML। टैग्सपॉप को देखने का प्रयास करें जो कि ऐसा करने के लिए काफी शानदार है! – slott

2

सामान्य शब्दों में, आप एक XML पार्सर के साथ HTML पार्स नहीं कर सकता:

  • एचटीएमएल के तत्व टैग सभी मामलों में मैच के लिए आवश्यक नहीं हैं। (उदाहरण के लिए <p> टैग को </p> टैग मिलान करने की आवश्यकता नहीं है।) इससे एक्सएमएल पार्सर के लिए टर्मिनल अपचन हो जाएगा।

  • वास्तविक दुनिया HTML HTML spec के अनुरूप नहीं होने के लिए कुख्यात है, अकेले HTML का एक XML संगत सबसेट दें।

हालांकि, अगर आपके इनपुट दस्तावेज़ एक्सएचटीएमएल है, तो आप सिद्धांत में जैसे SAX एक XML पार्सर का उपयोग कर सकेंगे चाहिए। आप भी एक्सएचटीएमएल स्कीमा के खिलाफ दस्तावेज़ को सत्यापित करने में सक्षम होना चाहिए।

5

फ्लैश कहता है, आपको एक HTML पार्सर की आवश्यकता है, न कि एक्सएमएल पार्सर। एचटीएमएल एक्सएमएल नहीं है।

मेरे द्वारा उपयोग किए जाने वाले अच्छे पार्सर्स Neko और TagSoup हैं। नेको एक अच्छा ऑल-राउंड पार्सर है; टैग सूप का उद्देश्य विशेष रूप से किसी भी प्रकार का विश्लेषण करने में सक्षम होना है, भले ही कितना खराब हो।

+0

टैग्सपॉप के बारे में बात यह है कि, एसएक्स पर आधारित होने पर, यह बिजली तेज है और यह < और > सहित सभी सामान मूल SAX चुटकुले हल करता है। एसएक्स के रूप में स्थापित करना उतना ही आसान है; हैंडलर विधियां वही हैं - एसएक्स से परे कोई सीखने की वक्र नहीं जिसे आप पहले ही जानते हैं। –

संबंधित मुद्दे