2010-05-21 21 views
5

Để tương tác với ứng dụng của khách hàng, chúng tôi sử dụng tài liệu XML. Tức là, chúng tôi gửi một XML qua HTTP và nhận một tài liệu XML phản hồi theo cùng một cách. Khách hàng đã chỉ định hai lược đồ XML mô tả định dạng của cả yêu cầu và trả lời. Tất cả đều hoạt động tốt, cho đến một ngày khách hàng bắt đầu sử dụng các phần CDATA trong XML phản hồi. Chúng tôi thiết lập trình phân tích cú pháp của chúng tôi không xác định các phần CDATA, vì vậy chúng tôi không thể diễn giải chúng.Đang bắt đầu sử dụng CDATA có thay đổi đột ngột không?

Câu hỏi của tôi là: Ai đã phạm sai lầm ở đây? Tôi đã cố gắng tìm một câu trả lời trong các tiêu chuẩn XML, nhưng tôi vẫn không chắc chắn. Tôi nghĩ rằng tôi không thể kê đơn sử dụng hoặc không sử dụng CDATA trong một XSD, phải không? Nếu vậy, liệu có đủ để đồng ý với một XSD hay không, nhưng một thỏa thuận riêng biệt phải được thực hiện về các phần CDATA? Hoặc là một trong những nghĩa vụ phải được chuẩn bị để phân tích CDATA và văn bản thường xuyên là tốt?

Tôi quan tâm đến cả quan điểm cá nhân của bạn và bất kỳ tuyên bố chính thức nào. Cảm ơn bạn!

Trả lời

6

Nhiều trình phân tích cú pháp XML tách riêng văn bản và CDATA, điều không may. Sai lầm là của bạn: không có sự khác biệt ngữ nghĩa giữa các khối văn bản thông thường và CDATA, do đó người gửi nên được tự do lựa chọn giữa chúng dựa trên nhu cầu của văn bản trong tầm tay.

Tin vui là việc chuyển mã của bạn phải là một vấn đề đơn giản.

+0

Giao diện phân tích cú pháp XML không may làm cho nó một phần là lỗi của các tác giả của trình phân tích cú pháp. – Thilo

+0

Chỉ có hai lựa chọn cho lỗi là người gửi và người nhận. Nhà cung cấp trình phân tích cú pháp không được phép! –

+0

Đó là lỗi của OP, nhưng Thilo là một điểm tốt. Nếu không có sự khác biệt ngữ nghĩa giữa CDATA và PCDATA, thì các trình phân tích cú pháp không cần phải cho bạn biết phần tử văn bản nào là. Nhưng một số vẫn làm. – dan04

6

CDATA là một phần cơ bản của XML. Không hỗ trợ nó có nghĩa là trình phân tích cú pháp bị hỏng (và không phải là một trình phân tích cú pháp XML thực (có thể đối phó với các phần tử chứa văn bản, CDATA, các thực thể, các phần tử khác, các nhận xét, v.v ...)).

Vì tôi đã đề cập đến nó trong một nhận xét về một câu trả lời khác, bây giờ tôi có một yêu cầu để lặp lại nó ở đây. Không mong đợi CDATA trong XML giống như not expecting fish in the sea.

+0

Trình phân tích cú pháp có thể đã xử lý CDATA tốt, chỉ cần cung cấp một cách khác để nhận nội dung thường xuyên và nội dung CDATA. Chúng tôi chỉ hỏi nó cho cái bình thường. – kicsit

+3

Khi phân tích một tài liệu (và thường khi tạo một tài liệu), bạn không cần phải quan tâm * cách * cấu trúc được biểu diễn. Nó phải được xử lý bởi trình phân tích cú pháp. Làm cho người dùng của trình phân tích cú pháp viết những thứ như '$ foo = $ bar-> has_cdata? decode_cdata ($ bar-> cdata_content): $ bar-> non_cdata_content; 'chỉ là câm. Nó cũng trở nên không thể sử dụng được vì bạn có thể thả vào và ra chế độ CDATA theo ý muốn (vì vậy một phần của nội dung phần tử nằm trong một khối CDATA và một phần thì không). – Quentin

+0

LOL - Đã chụp! :) – kicsit

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