2011-10-03 106 views
7

我有一個函數,我傳遞一個字符串作爲參數名爲filterXML其中的一個屬性中包含'&'。XmlDocument拋出「解析EntityName時發生錯誤」

我知道XML不會識別它,它會給我一個錯誤。這裏是我的代碼:

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!!! 

我應該更改我的代碼來編輯或解析filterXml?我filterXml看起來是這樣的:

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

我改變我的字符串值從&到&。這是我的代碼:

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

但它給了我一個錯誤的內部if語句:文字太多。

+0

由於&符號錯誤(&) –

+0

這是遊戲後期,但如果其他人絆倒它 - 「太多文字」的錯誤是由於這個事實在他的「」周圍使用單引號「。單引號表示只允許爲單個字符的字符。 – Euric

回答

13

上面顯示的文件不是格式正確的XML,因爲&字符未被轉義。

你可以嘗試使用:

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

或:

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

我正在做這樣的事情:string editXml = filterXml; if(editXml.Contains(「&」)) { editXml.Replace('&','&'); } –

+0

但它給了我一個錯誤:文字太多。 –

+0

雖然總體而言選項2有點矯枉過正,但在這種情況下不是很有用。 –

1

要指定XML的符號,你應該使用&amp;,因爲&符號( '&')在XML特殊的意義。

2

關於第二個問題:String.Replace有兩個簽名。一個需要字符,另一個需要字符串。使用單引號嘗試構建字符文字 - 但「C#」的「& amp;」實際上是一個字符串(它有五個字符)。

它使用雙引號嗎?

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

如果你想成爲一個有點保守,你也可以編寫代碼,以確保&是你更換後不跟的

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

一個(但是這仍然不是一個完美的過濾)

相關問題