2010-03-23 45 views
7

Trước tiên, hãy để tôi nói tôi là người mới đối với SAX và Java.Đánh dấu phải được định dạng tốt

Tôi đang cố gắng đọc thông tin từ tệp XML không được định dạng đúng.

Khi tôi cố gắng sử dụng SAX hoặc DOM Parser tôi nhận được lỗi sau đây trong phản ứng:

The markup in the document following the root element must be well-formed. 

Đây là cách để tôi thiết lập tập tin XML của tôi:

<format type="filename" t="13241">0;W650;004;AG-Erzgeb</format> 
<format type="driver" t="123412">001;023</format> 
    ... 

Tôi có thể buộc các SAX hoặc DOM phân tích cú pháp các tệp XML ngay cả khi chúng không được định dạng đúng XML?

Cảm ơn sự giúp đỡ của bạn. Nhiều đánh giá cao. Haythem

+2

FYI: Theo định nghĩa ... Nếu nó không được định dạng đúng thì không phải ** XML. http://en.wikipedia.org/wiki/XML#Well-formedness_and_error-handling –

Trả lời

18

Đặt cược tốt nhất của bạn là làm cho XML được định dạng tốt, có thể bằng cách xử lý trước một chút. Trong trường hợp này, bạn có thể đạt được điều đó chỉ đơn giản bằng cách đặt một khai báo XML trên (và thậm chí đó là không bắt buộc) và cung cấp một phần tử gốc (mà không phải là không bắt buộc), như thế này:

<?xml version="1.0"?> 
<wrapper> 
    <format type="filename" t="13241">0;W650;004;AG-Erzgeb</format> 
    <format type="driver" t="123412">001;023</format> 
</wrapper> 

Ở đó tôi đã tùy tiện đã chọn tên "wrapper" cho phần tử gốc; nó có thể là bất cứ điều gì bạn thích.

+7

Tôi chỉ muốn thêm rằng bạn không nhất thiết phải thực hiện sửa đổi đó trên đĩa, nhưng bạn có thể làm điều đó trên bay bằng cách cung cấp một bộ lọc 'InputStream' /' Reader'. Đặc biệt đối với các tệp lớn (hoặc đọc XML từ một URL), điều này có thể rất hữu ích. 'SequenceInputStream' có thể hữu ích ở đây: http://java.sun.com/javase/6/docs/api/java/io/SequenceInputStream.html –

+0

Khả năng hiển thị tốt. không dễ dàng hơn để phân tích cú pháp phân tích cú pháp ?. tôi có thể bật phân tách cú pháp() của tôi và ghi đè lên nó để bỏ qua trạng thái không được tạo đúng không? – Haythem

+2

Haythem: có thể không, vì trình phân tích cú pháp nằm sâu trong thư viện và hành vi của trình duyệt như vậy sẽ không được xác định (các thư viện XML không biết cách xử lý XML với nhiều phần tử gốc). Làm theo cách này ngay lập tức làm cho XML của bạn được hình thành tốt và ** tất cả ** các công cụ nhận thức XML có thể đột nhiên xử lý nó tốt (miễn là bạn không có phần không chính xác nào khác trong đó). –

1

Gợi ý: sử dụng sax hoặc stax bạn có thể phân tích cú pháp thành công tài liệu xml chưa được tạo thành tốt cho đến khi gặp lỗi FIRST "well forming-ness".

(Tôi biết rằng đây không phải là sự giúp đỡ quá nhiều ...)

0

Như DOM sẽ quét bạn tập tin xml sau đó xây dựng một cây, các nút gốc của cây cũng giống như là 1 lời. Tuy nhiên, nếu trình phân tích cú pháp không thể tìm thấy hoặc thậm chí, nó thậm chí có thể xây dựng cây. Vì vậy, nó tốt hơn để làm một số tiền xử lý các tập tin xml trước khi phân tích nó bằng DOM hoặc Sax.

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