2013-08-01 37 views
5

Văn bản quasi html, trông giống như: Simple<br> text <b>simple</b> text simple <BR><BR>text simple text, tôi muốn phân tích cú pháp và tạo dom document. Nhưng vấn đề là với thẻ không khép kín, khi tôi cố gắng này:Cách phân tích văn bản quasi-html trong java?

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
InputSource source = new InputSource(new StringReader(
Document doc = builder.parse(source); 

Lỗi xảy ra: org.xml.sax.SAXParseException; The element type "br" must be terminated by the matching end-tag

Tôi không muốn thay thế tất cả <br> bởi <br></br>, bất kỳ giải pháp hay lời khuyên?

+4

Có thể bạn không thể đưa nó vào DOM. Bạn cần phải sử dụng một trình phân tích cú pháp HTML khoan dung như [jSoup] (http://jsoup.org/) - nó sẽ thử và sửa HTML khi nó đi. Một chút giống như một trình duyệt web. –

+0

Tôi nghĩ rằng nó có thể được thực hiện với HTMLEditorKit ... – linski

+0

@BoristheSpider không cần jSoup nó có thể được thực hiện với Java tiêu chuẩn, xem câu trả lời của tôi. – linski

Trả lời

3

Sử dụng jsoup và tận hưởng sự dễ sử dụng.

2

Bạn phải viết lại tất cả HTML được định dạng tốt. Về cơ bản bạn đi qua các văn bản và tạo ra một danh sách tất cả các thẻ mở. Khi bạn tìm thấy thẻ đóng tương ứng, bạn có thể xóa thẻ đó khỏi danh sách. Khi bạn trải qua, và bạn vẫn có các mục trong Danh sách này, bạn biết nó không được hình thành tốt.

Sự cố là nơi chèn các thẻ không được đính kèm. Bạn có thể thử chèn một thẻ đóng tương ứng, ngay sau từ tiếp theo. Trong trường hợp của bạn, bạn chỉ có thể thay thế thẻ br bằng br/tag, nếu đó là sự xuất hiện duy nhất. Chuỗi cách này represntes nội dung của tài liệu.

string = string.replace("<br>", "<br />"); 
Các vấn đề liên quan