Estoy tratando de analizar HTML en Android desde una página web, y como la página web no está bien formada, obtengo SAXException
.
¿Hay alguna forma de analizar HTML en Android?
Estoy tratando de analizar HTML en Android desde una página web, y como la página web no está bien formada, obtengo SAXException
.
¿Hay alguna forma de analizar HTML en Android?
Respuestas:
Acabo de encontrar este problema. Probé algunas cosas, pero me decidí por usar JSoup . El frasco tiene aproximadamente 132k, lo cual es un poco grande, pero si descarga la fuente y elimina algunos de los métodos que no utilizará, entonces no es tan grande.
=> Lo bueno de esto es que manejará HTML mal formado
Aquí hay un buen ejemplo de su sitio.
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();
}
¿Ha intentado usar Html.fromHtml (fuente) ?
Creo que la clase es bastante liberal con respecto a la calidad de la fuente (usa TagSoup internamente, que fue diseñado teniendo en cuenta el HTML malo de la vida real). Sin embargo, no admite todas las etiquetas HTML, pero viene con un controlador que puede implementar para reaccionar en las etiquetas que no comprende.
String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();
toString()
al Spanned
objeto devuelto Html.fromHtml(str)
hará que muchas de las HTML
etiquetas no funcionen (incluidas <i>
<u>
<b>
). Entonces, si está configurando una vista de texto, simplemente haga:myTextView.setText(Html.fromHtml(str))
Html.fromHtml()
. Mira esto stackoverflow.com/a/3150456/1987045
Todos sabemos que la programación tiene infinitas posibilidades. Hay varias soluciones disponibles para un solo problema, así que creo que todas las soluciones anteriores son perfectas y pueden ser útiles para alguien, pero para mí esta me salvó el día.
Entonces el código es así
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();
}
Solo tiene que llamar a la función anterior en onCreate Method
suMainActivity
Espero que este también sea útil para ustedes.
Lea también el blog original en Medium
Tal vez pueda usar WebView, pero como puede ver en el documento, WebView no admite javascript y otras cosas como widgets de forma predeterminada.
http://developer.android.com/reference/android/webkit/WebView.html
Creo que puede habilitar javascript si lo necesita.