2011-12-05 21 views
14

Tôi có một ứng dụng (giống như nhiều thứ khác) đưa vào đầu vào của người dùng, lưu trữ nó trong cơ sở dữ liệu và sau đó xử lý nó bằng công cụ XML (trong số những thứ khác). Ứng dụng này có tính năng nhập văn bản miễn phí và giống như nhiều nhà phát triển khác, tôi rất cẩn thận khi thoát và trích dẫn để có thể xử lý dữ liệu nhập có chứa các loại khoảng trắng, ký tự trích dẫn, ký tự XML được đặt trước, v.v.Thực hành tốt nhất để xử lý các tab dọc và các ký tự xml không hợp lệ khác

Tuy nhiên, đôi khi người dùng sẽ quản lý để nhập chuỗi chứa ký tự tab dọc (hex 0B) hoặc nguồn cấp dữ liệu biểu mẫu (hex 0C). điều này hoàn toàn không thể được xử lý bởi các công cụ XML và làm cho ứng dụng bị khóa. Trong ứng dụng của tôi nó là khá quan trọng để bảo quản các đầu vào ban đầu trong quá trình 'chuyến đi vòng', vì vậy tôi rất ghét để chỉ ra bất kỳ ký tự tôi không thích, đặc biệt là những thứ như thức ăn hình thức mà đôi khi vẫn được sử dụng trong các tệp văn bản thuần túy.

có bất kỳ phương pháp hay nhất hoặc chiến lược chung nào được chấp nhận để xử lý các ký tự này khi xử lý XML có liên quan không?

Trả lời

-3

Bạn nên thoát chúng bằng cách sử dụng amperstand (� đến &#0x1F), sau đó giải mã/khôi phục chúng ở cuối.

Xem XmlTextWriter incorrectly writing control characters

+0

-1: điều này không có ý nghĩa. XML không hợp lệ đơn giản không phải là XML. –

+0

Sau đó, câu hỏi không có ý nghĩa. Nếu yêu cầu đặt các ký tự không hợp lệ đặc biệt vào XML (cách không hợp lệ), việc thoát sẽ vẫn cho phép tệp được xử lý trong khi trường hợp cạnh sử dụng các ký tự không hợp lệ phải được xử lý bởi chính ứng dụng đó. Cũng có thể sử dụng CDATA hoặc bất kỳ định dạng nào khác. – Vincent

+3

Thật vậy, câu hỏi không có ý nghĩa gì cả. Đó là một trường hợp khác mà nhà phát triển đang được yêu cầu bù đắp cho thực tế là những người gửi dữ liệu không hiểu XML. –

3

Vâng, tiếc là một số nhân vật là bất hợp pháp trong XML, và không có thực thể tương đương. Là một trong những ví dụ này, hãy xem:

http://www.jdom.org/docs/apidocs.1.1/org/jdom/Element.html#setText(java.lang.String) 

là bộ đặt chuỗi ... có thể ném ngoại lệ! Tab dọc chính xác là một trong những ký tự mà không có thực thể XML, cũng không phải là cách để "thoát" nó bằng XML một mình.

Tôi tự làm việc này bằng cách sử dụng mã hóa base64 để vệ sinh chuỗi có thể chứa các ký tự đó. Đó là một chút ngớ ngẩn, kể từ khi tôi phải mã hóa base64 và giải mã tất cả các thời gian, nhưng tôi không nghĩ rằng có một lựa chọn tốt.

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