Bạn không cần khai báo một thực thể trong DTD của mình hoặc thậm chí sử dụng một DTD. Có thể bạn không cần sử dụng biểu diễn Unicode của ký tự. Bạn chắc chắn không cần sử dụng phần CDATA.
Những gì bạn cần làm là sử dụng DOM để tạo XML của bạn thay vì cố gắng xây dựng nó bằng thao tác chuỗi. DOM sẽ khắc phục sự cố này cho bạn.
Trong C#, mã này:
XmlDocument d = new XmlDocument();
d.LoadXml("<foo/>");
char c = (char)187;
d.DocumentElement.InnerText = "Here's that character: " + c;
Debug.WriteLine(d.OuterXml);
d.DocumentElement.InnerText = "Here it is as an HTML entity: »";
Debug.WriteLine(d.OuterXml);
sản xuất sản lượng này:
<foo>Here's that character: »</foo>
<foo>Here it is as an HTML entity: &raquo;</foo>
Như bạn có thể nhìn thấy từ ví dụ đầu tiên, nhân vật » là hoàn toàn hợp pháp trong văn bản XML. Nhưng tôi không nghĩ rằng bạn đang cố gắng đại diện cho nhân vật đó.
Tôi nghĩ bạn đang cố gắng làm những gì trong ví dụ thứ hai, dựa trên thông báo lỗi mà bạn đã báo cáo. Bạn đang cố gắng đại diện cho chuỗi ký tự »
. Cách thích hợp để biểu diễn chuỗi ký tự đó trong văn bản XML là bằng cách thoát khỏi dấu và; do đó: &raquo;
.
Vì vậy, nếu bạn phải sử dụng thao tác chuỗi để tạo XML của mình, chỉ cần đảm bảo rằng bạn thoát khỏi bất kỳ ký hiệu nào trong dữ liệu nguồn của mình. Không tin tưởng vào vấn đề này, nhưng nếu bạn đang sử dụng DOM, điều này sẽ được thực hiện tự động cho bạn.
Một điều khác. Rất có thể trong câu hỏi ban đầu của bạn, giờ đây đã đọc "Tôi đang sử dụng» ", những gì bạn thực sự đã nhập được nhập là" Tôi đang sử dụng & raquo; ". Tuy nhiên, bài đăng thực tế không giống như vậy. Nếu bạn cần phải đại diện cho văn bản theo nghĩa đen trong markdown, kèm theo nó trong backticks; nếu không, các thực thể HTML sẽ được chuyển đổi thành biểu diễn ký tự của chúng khi bài đăng được hiển thị.
Nguồn
2008-10-16 19:56:17
tôi xác định nó như là ». Kiểm tra lại và không, tôi không quên dấu chấm phẩy vừa bỏ qua khi tôi dán vào đây. – BillZ