मैं एक वेबपेज से एंड्रॉइड में HTML पार्स करने की कोशिश कर रहा हूं, और चूंकि वेबपेज अच्छी तरह से नहीं बना है, मुझे मिलता है SAXException
।
क्या एंड्रॉइड में HTML को पार्स करने का एक तरीका है?
मैं एक वेबपेज से एंड्रॉइड में HTML पार्स करने की कोशिश कर रहा हूं, और चूंकि वेबपेज अच्छी तरह से नहीं बना है, मुझे मिलता है SAXException
।
क्या एंड्रॉइड में HTML को पार्स करने का एक तरीका है?
जवाबों:
मेरे सामने अभी यह समस्या आई. मैंने कुछ चीजों की कोशिश की, लेकिन JSoup का उपयोग करने पर बस गया । जार 132k के बारे में है, जो थोड़ा बड़ा है, लेकिन अगर आप स्रोत डाउनलोड करते हैं और कुछ तरीके निकालते हैं जो आप उपयोग नहीं करेंगे, तो यह उतना बड़ा नहीं है।
=> इसके बारे में अच्छी बात यह है कि यह बुरी तरह से गठित HTML को संभाल लेगा
यहाँ उनकी साइट से एक अच्छा उदाहरण है।
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
//http://jsoup.org/cookbook/input/load-document-from-url
//Document doc = Jsoup.connect("http://example.com/").get();
Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text();
}
क्या आपने Html.fromHtml (स्रोत) का उपयोग करने की कोशिश की है ?
मुझे लगता है कि स्रोत की गुणवत्ता के संबंध में यह वर्ग बहुत उदार है (यह आंतरिक रूप से टैग्सअप का उपयोग करता है , जिसे वास्तविक जीवन, मन में खराब एचटीएमएल) के साथ डिजाइन किया गया था। यद्यपि यह सभी HTML टैग का समर्थन नहीं करता है, लेकिन यह एक हैंडलर के साथ आता है जिसे आप उन टैग पर प्रतिक्रिया करने के लिए कार्यान्वित कर सकते हैं जो इसे समझ में नहीं आते हैं।
String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();
toString()
जिस Spanned
ऑब्जेक्ट से कॉल किया जाता है, उस पर कॉल करने से Html.fromHtml(str)
कई HTML
टैग काम नहीं करेंगे (सहित <i>
<u>
<b>
)। तो अगर आप एक myTextView.setText(Html.fromHtml(str))
Html.fromHtml()
। इसे बाहर की जाँच करें stackoverflow.com/a/3150456/1987045
हम सभी जानते हैं कि प्रोग्रामिंग में अनंत संभावनाएं हैं। किसी भी समस्या के लिए समाधान की संख्या उपलब्ध है, इसलिए मुझे लगता है कि उपरोक्त सभी समाधान सही हैं और किसी के लिए उपयोगी हो सकते हैं, लेकिन मेरे लिए यह मेरा दिन बचा सकता है।
तो कोड इस तरह से जाता है
private void getWebsite() {
new Thread(new Runnable() {
@Override
public void run() {
final StringBuilder builder = new StringBuilder();
try {
Document doc = Jsoup.connect("http://www.ssaurel.com/blog").get();
String title = doc.title();
Elements links = doc.select("a[href]");
builder.append(title).append("\n");
for (Element link : links) {
builder.append("\n").append("Link : ").append(link.attr("href"))
.append("\n").append("Text : ").append(link.text());
}
} catch (IOException e) {
builder.append("Error : ").append(e.getMessage()).append("\n");
}
runOnUiThread(new Runnable() {
@Override
public void run() {
result.setText(builder.toString());
}
});
}
}).start();
}
तुम बस में ऊपर फ़ंक्शन को कॉल करने के लिए है onCreate Method
की अपनीMainActivity
मुझे उम्मीद है कि यह एक आप लोगों के लिए भी उपयोगी है।
साथ ही मूल ब्लॉग को माध्यम पर पढ़ें
शायद आप WebView का उपयोग कर सकते हैं, लेकिन जैसा कि आप डॉक्टर में देख सकते हैं WebView जावास्क्रिप्ट और डिफ़ॉल्ट रूप से विजेट जैसे अन्य सामान का समर्थन नहीं करता है।
http://developer.android.com/reference/android/webkit/WebView.html
मुझे लगता है कि यदि आपको आवश्यकता हो तो आप जावास्क्रिप्ट को सक्षम कर सकते हैं।