Próbuję przeanalizować HTML w Androidzie ze strony internetowej, a ponieważ strona internetowa nie jest dobrze sformułowana, otrzymuję SAXException
.
Czy istnieje sposób na przeanalizowanie kodu HTML w systemie Android?
Próbuję przeanalizować HTML w Androidzie ze strony internetowej, a ponieważ strona internetowa nie jest dobrze sformułowana, otrzymuję SAXException
.
Czy istnieje sposób na przeanalizowanie kodu HTML w systemie Android?
Odpowiedzi:
Właśnie napotkałem ten problem. Próbowałem kilku rzeczy, ale zdecydowałem się na użycie JSoup . Jar ma około 132k, co jest trochę duże, ale jeśli pobierzesz źródło i usuniesz niektóre z metod, których nie będziesz używać, to nie jest tak duży.
=> Dobrą rzeczą jest to, że będzie obsługiwać źle sformułowany HTML
Oto dobry przykład z ich witryny.
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();
}
Czy próbowałeś użyć Html.fromHtml (źródło) ?
Myślę, że ta klasa jest dość liberalna pod względem jakości źródła (używa wewnętrznie TagSoup , który został zaprojektowany z myślą o prawdziwym, złym HTMLu ). Nie obsługuje jednak wszystkich tagów HTML, ale zawiera procedurę obsługi, którą można zaimplementować, aby reagować na tagi, których nie rozumie.
String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();
toString()
na Spanned
obiekcie wrócił z Html.fromHtml(str)
uczyni wiele HTML
znaczników nie działać (włącznie <i>
<u>
<b>
). Więc jeśli ustawiasz widok tekstu, po prostu zrób:myTextView.setText(Html.fromHtml(str))
Html.fromHtml()
. Sprawdź to stackoverflow.com/a/3150456/1987045
Wszyscy wiemy, że programowanie ma nieskończone możliwości. Istnieje wiele rozwiązań dostępnych dla jednego problemu, więc myślę, że wszystkie powyższe rozwiązania są idealne i mogą być pomocne dla kogoś, ale dla mnie to oszczędza mój dzień.
Więc Code działa w ten sposób
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();
}
Musisz tylko wywołać powyższą funkcję w onCreate Method
swoimMainActivity
Mam nadzieję, że ten jest również pomocny dla was.
Przeczytaj także oryginalny blog na Medium
Być może możesz użyć WebView, ale jak widać w dokumencie, WebView nie obsługuje domyślnie javascript i innych rzeczy, takich jak widżety.
http://developer.android.com/reference/android/webkit/WebView.html
Myślę, że możesz włączyć javascript, jeśli go potrzebujesz.