c# - 无法读取包含 & 符号的 XML 文档

标签 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;
            }

最佳答案

正如@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("&", "&"));
}

输出是:

34 & 34 

如果使用 LINQ2XML 没问题,那么解决方案会更短,而且不需要编写反向(第二)替换,因为 LINQ2XML 会自动为您完成:

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

输出同上。

关于c# - 无法读取包含 & 符号的 XML 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224723/

相关文章:

python - 如何解析 python 中的 xml 路径列表?

c - 使用 libxml2 获取内容

xml - 将 XML 转换为 Json 并从转换后的 Json 中删除 XML 声明

c# - 从 C# 调用 Numpy 和 scikit-learn

c# - 无法使用 openxml 在 excel 中设置所需的背景颜色

c# - 每次使用时检查属性是否为空?

python - Odoo 10 从自定义模型转到购买列表

c# - 是否有超过 4 个参数的 Func 对象?

c# - WebClient DownloadString() 计数器?

xml - 使用 xslt 转换多个 xml 模式文档