使用'&'解析实体名时发生错误

时间:2015-05-13 11:07:01

标签: c# xml escaping

我有下一个用Visual c#打开.XML文档的程序。我无法打开Xml,因为它有'&',我不知道我怎么能打开。

private void button1_Click(object sender, EventArgs e)
{
    XmlDocument doc;
    doc = new XmlDocument();
    doc.Load("nuevo.xml");

    XmlNodeList menus;
    menus = doc.GetElementsByTagName("menu");

    foreach (XmlNode unMenu in menus)
    {
        if (unMenu.Attributes["precio"].Value == "50")
        {
            //Console.WriteLine(unMenu.Attributes["type"].Value);
            XPathNavigator navegador = doc.CreateNavigator();
            XPathNodeIterator nodos = navegador.Select("/restaurante");
            while (nodos.MoveNext())
            {
                Console.WriteLine(nodos.Current.OuterXml);
                Console.WriteLine();
                textBox1.Text = nodos.Current.OuterXml;
            }
        }    
    }
}

3 个答案:

答案 0 :(得分:2)

如果收到错误

  

使用'&'

解析实体名称时发生错误

然后有一个“&”以XML元素的名义在某处。这在XML文档中是不允许的。您无法使用XmlDocument(或XDocument)类打开无效的XML文件。

你可以做几件事:

  1. 在尝试阅读之前,请确保XML文件始终有效。但这取决于您的情况,可能无法实现。
  2. 通过替换“&”来预处理您的XML文件以修复无效内容用“& amp;”。您可以手动或在运行时执行此操作。
  3. 使用HtmlAgilityPack解析无效文件。
  4. 就个人而言,如果可能,我会选择1)或2)否则。

答案 1 :(得分:1)

&中所有出现的内容替换为xml中的&

答案 2 :(得分:0)

因此,在这个问题上花费了几个小时之后:事实证明,如果您在xml字符串中包含一个&符号或其他XML转义字符,则在尝试读取XML时它将总是失败。要解决此问题,请将特殊字符替换为转义的字符串格式 127.0.0.1 cookie.abc