2008-10-28 30 views
7

Tôi đang sử dụng thư viện của bên thứ ba trả về "XML" không hợp lệ vì nó chứa các ký tự không hợp lệ, cũng như các thực thể không được khai báo. Tôi cần phải sử dụng một trình phân tích cú pháp XML của Java để phân tích cú pháp XML này, nhưng nó nghẹt thở.Làm sạch XML xấu trong Java

Có cách nào chung để khử trùng XML này để nó trở nên hợp lệ không?

Trả lời

6

Tôi nghĩ rằng lựa chọn của bạn là một cái gì đó như:

Hai loại đầu tiên có trọng lượng nặng hơn, vì chúng được thiết kế để phân tích cú pháp HTML được hình thành. Nếu bạn biết rằng những vấn đề này là do mã hóa và các tổ chức, nhưng mặt khác cũng được hình thành tôi muốn đề nghị bạn cuộn của riêng bạn:

  • chuẩn một mã hóa sang UTF-8
  • sử dụng một bộ mã hóa tiêu chuẩn cho các văn bản giữa các ký tự> và < (đối tượng văn bản).
+0

dom4j là một trình phân tích cú pháp mạnh hơn có thể phân tích cú pháp bất kể một số lỗi nhỏ http://dom4j.sourceforge.net –

3

Có vẻ như bạn cần tìm ra liệu có cách tự động xóa dữ liệu trước khi chuyển sang trình phân tích cú pháp không. Các ký tự nhất định không hợp lệ, không hợp lệ trong bộ ký tự được khai báo hoặc các ký tự meta XML không thoát như '<'?

Đối với các thực thể không được khai báo, tôi đã từng giải quyết vấn đề này bằng cách định cấu hình trình phân tích cú pháp SAX với trình xử lý lỗi cơ bản bỏ qua các lỗi này. Điều đó có thể giúp bạn quá. Xem API ErrorHandler.

0

Đối với các ký tự không hợp lệ, tôi khuyên bạn nên triển khai lọc Reader; chỉ cần chuyển đổi chúng (giả sử đây là các ký tự điều khiển) với dấu cách hoặc dải ra.

Thực thể không khai báo là phức tạp hơn; một số trình phân tích cú pháp xml cho phép bạn xác định DTD thay thế để sử dụng (ít nhất là Woodstox) Nếu có, bạn có thể tiêm DTD để khai báo các thực thể mà bạn cần

Các vấn đề liên quan