无法读取包含与符号的 XML 文档

gar*_*rci 5 c# xml

我正在编写一个使用 Visual C# 读取 XML 文件的程序。我在读取 Xml 文件时遇到问题,因为它包含无效的 XML 符号,例如“&”。

我必须阅读 XML,但我无法修改文档。如何使用 C# 修改 Xml 文件?到目前为止我的代码:

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


        XmlNodeList Xpersonas = doc.GetElementsByTagName("personas");
        XmlNodeList Xlista = ((XmlElement)Xpersonas[0]).GetElementsByTagName("edad");

            foreach (XmlElement nodo in Xlista)
            {
                string edad = nodo.GetAttribute("edad");
                string nombre = nodo.InnerText;
                textBox1.Text = nodo.InnerXml;
            }
Run Code Online (Sandbox Code Playgroud)

pas*_*sty 3

正如 @EBrown 所建议的,一种可能性是读取字符串变量中的文件内容,并将&符号替换为属性 XML 的正确表示形式&,然后解析 XML 结构。一个可能的解决方案可能如下所示:

var xmlContent = File.ReadAllText(@"nuevo.xml");
XmlDocument doc;
doc = new XmlDocument();
doc.LoadXml(xmlContent.Replace("&", "&"));

XmlNodeList Xpersonas = doc.GetElementsByTagName("personas");
XmlNodeList Xlista = ((XmlElement)Xpersonas[0]).GetElementsByTagName("edad");

foreach (XmlElement nodo in Xlista)
{
    string edad = nodo.GetAttribute("edad");
    string nombre = nodo.InnerText;
    Console.WriteLine(nodo.InnerXml.Replace("&", "&"));
}
Run Code Online (Sandbox Code Playgroud)

输出是:

34 & 34 
Run Code Online (Sandbox Code Playgroud)

如果可以使用 LINQ2XML,那么解决方案会更短,并且无需编写反向(第二次)替换,因为 LINQ2XML 会自动为您完成此操作:

var xmlContent = File.ReadAllText(@"nuevo.xml");
var xmlDocument = XDocument.Parse(xmlContent.Replace("&", "&"));
var edad = xmlDocument.Root.Element("edad").Value;
Console.WriteLine(edad);
Run Code Online (Sandbox Code Playgroud)

输出与上面相同。