2011-10-03 36 views
7

Tôi có một hàm mà tôi chuyển một chuỗi dưới dạng tham số được gọi là filterXML chứa '&' ở một trong các thuộc tính.XmlDocument throwing "Đã xảy ra lỗi khi phân tích cú pháp EntityName"

Tôi biết rằng XML sẽ không nhận ra nó và nó sẽ ném cho tôi một lỗi. Đây là mã của tôi:

public XmlDocument TestXMLDoc(string filterXml) 
{ 
    XmlDocument doc = new XmlDocument(); 
    XmlNode root = doc.CreateElement("ResponseItems"); 

    // put that root into our document (which is an empty placeholder now) 
    doc.AppendChild(root); 

    try 
    { 
     XmlDocument docFilter = new XmlDocument(); 
     docFilter.PreserveWhitespace = true; 

     if (string.IsNullOrEmpty(filterXml) == false) 
      docFilter.LoadXml(filterXml); //ERROR THROWN HERE!!! 

Tôi nên thay đổi gì trong mã của mình để chỉnh sửa hoặc phân tích cú pháp filterXml? filterXml của tôi trông như thế này:

<Testing> 
<Test>CITY & COUNTY</Test> 
</Testing> 

tôi thay đổi giá trị chuỗi của tôi từ & để &. Đây là mã của tôi cho điều đó:

string editXml = filterXml; 
    if (editXml.Contains("&")) 
    { 
     editXml.Replace('&', '&amp;'); 
    } 

Nhưng nó cho tôi một lỗi ở bên trong câu lệnh if: Quá nhiều chữ.

+0

Đó là lỗi do ký hiệu & (&) –

+0

Điều này là muộn trong trò chơi, nhưng trong trường hợp bất kỳ ai khác tình cờ gặp nó - lỗi "Quá nhiều chữ" gây ra bởi thực tế là Gunda dấu nháy đơn được sử dụng xung quanh "của anh ấy". Dấu nháy đơn cho biết ký tự, chỉ được phép là một ký tự đơn. – Euric

Trả lời

13

Tệp được hiển thị ở trên không phải là XML được định dạng tốt bởi vì dấu và không được thoát.

Bạn có thể thử với:

<Testing> 
    <Test>CITY &amp; COUNTY</Test> 
</Testing> 

hay:

<Testing> 
    <Test><![CDATA[CITY & COUNTY]]></Test> 
</Testing> 
+1

Tôi đang làm một cái gì đó như thế này: string editXml = filterXml; nếu (editXml.Contains ("&")) { editXml.Replace ('&', '&'); } –

+0

Nhưng nó cho tôi một lỗi: Quá nhiều chữ. –

+0

Tùy chọn 2 là một chút quá mức cần thiết và tổng thể, không phải là rất hữu ích trong trường hợp này. –

1

Để xác định một dấu trong XML bạn nên sử dụng &amp; kể từ khi dấu và ('&') có một ý nghĩa đặc biệt trong XML .

2

Về câu hỏi thứ hai: có hai chữ ký cho String.Replace. Một trong đó có nhân vật, người kia có dây. Sử dụng dấu nháy đơn cố gắng để xây dựng các ký tự chữ - nhưng "& amp;", đối với C#, thực sự là một chuỗi (nó có năm ký tự).

Tính năng này có hoạt động với dấu ngoặc kép không?

editXml.Replace("&", "&amp;"); 

Nếu bạn muốn có một chút dè dặt hơn, bạn cũng có thể viết mã để đảm bảo rằng các & s bạn đang thay thế không được thực hiện bởi một trong những

amp; quot; apos; gt; lt; or # 

(nhưng điều này sẽ vẫn không phải là một bộ lọc hoàn hảo)

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