XmlDocument抛出“解析EntityName时发生错误”

时间:2011-10-03 17:57:31

标签: c# xml string xmldocument

我有一个函数,我传递的字符串为params,名为filterXML,其中包含'&'在其中一个属性。

我知道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>

我正在更改我的字符串值&amp;到&amp ;.这是我的代码:

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

但它在if语句中给我一个错误:太多的文字。

3 个答案:

答案 0 :(得分:14)

上面显示的文件不是格式良好的XML,因为&符号未被转义。

您可以尝试:

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

或:

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

答案 1 :(得分:2)

关于第二个问题:String.Replace有两个签名。一个取字符,另一个取字符串。使用单引号尝试构建字符文字 - 但对于C#,“&amp; amp;”实际上是一个字符串(它有五个字符)。

是否适用于双引号?

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

如果你想保守一点,你也可以编写代码以确保你所替换的&#s之后没有其中一个

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

(但这仍然不是一个完美的过滤)

答案 2 :(得分:1)

要在XML中指定&符号,您应该使用&amp;,因为&符号('&amp;')在XML中具有特殊含义。