Tôi đang cố gắng phân tích cú pháp HTML trong android từ một trang web và vì trang web đó không được hình thành tốt nên tôi nhận được SAXException
.
Có cách nào để phân tích cú pháp HTML trong Android không?
Tôi đang cố gắng phân tích cú pháp HTML trong android từ một trang web và vì trang web đó không được hình thành tốt nên tôi nhận được SAXException
.
Có cách nào để phân tích cú pháp HTML trong Android không?
Câu trả lời:
Tôi vừa gặp phải vấn đề này. Tôi đã thử một vài điều, nhưng vẫn ổn định bằng cách sử dụng JSoup . Hũ khoảng 132k, hơi to nhưng nếu tải nguồn về và lấy ra mấy cái phương pháp không dùng được thì cũng không lớn bằng.
=> Điều tốt về nó là nó sẽ xử lý HTML được định dạng xấu
Đây là một ví dụ điển hình từ trang web của họ.
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();
}
Bạn đã thử sử dụng Html.fromHtml (nguồn) chưa?
Tôi nghĩ rằng lớp đó khá tự do đối với chất lượng nguồn (nó sử dụng TagSoup bên trong, được thiết kế với HTML thực tế, có tính chất xấu). Tuy nhiên, nó không hỗ trợ tất cả các thẻ HTML, nhưng nó đi kèm với một trình xử lý mà bạn có thể triển khai để phản ứng trên các thẻ mà nó không hiểu.
String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();
toString()
trên Spanned
đối tượng trở về từ Html.fromHtml(str)
sẽ làm cho rất nhiều các HTML
thẻ không hoạt động (bao gồm <i>
<u>
<b>
). Vì vậy, nếu bạn đang đặt chế độ xem văn bản, chỉ cần làm:myTextView.setText(Html.fromHtml(str))
Html.fromHtml()
. Hãy xem điều này qua stackoverflow.com/a/3150456/1987045
Tất cả chúng ta đều biết rằng lập trình có vô vàn khả năng.
Vì vậy, Code diễn ra như thế này
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();
}
Bạn chỉ cần gọi hàm trên trong onCreate Method
của bạnMainActivity
Tôi hy vọng cái này cũng hữu ích cho các bạn.
Cũng đọc blog gốc tại Medium
Có thể bạn có thể sử dụng WebView, nhưng như bạn thấy trong tài liệu WebView không hỗ trợ javascript và những thứ khác như widget theo mặc định.
http://developer.android.com/reference/android/webkit/WebView.html
Tôi nghĩ rằng bạn có thể kích hoạt javascript nếu bạn cần.