Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法读取包含符号和符号的XML文档_C#_Xml - Fatal编程技术网

C# 无法读取包含符号和符号的XML文档

C# 无法读取包含符号和符号的XML文档,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("nu

我正在编写一个程序,用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所建议的,一种可能是读取字符串变量中的文件内容,并用propertxml
的正确表示形式替换
&
符号
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);

输出与上面相同。

是否要使
XmlDocument
对象接受无效的Xml文档?您能发布一些无效的Xml文档吗?这是XmlDocument->Pablo 34&34您能将Xml文件加载到内存中并解析出任何错误信息吗?例如,将符号(
&
)转换为适当的转义序列?我只能通过Visual c修改文档。作为一名纯粹主义者,我必须警告不要用转义(
&
)替换符号(
&
):谁知道XML中的哪些符号已经转义,或者更糟的是:逃避其他东西。Visual c#告诉我“文件”不退出,我会怎么做?@EBrown:我同意。在这种情况下,唯一的解决方案可能是自定义XML解析器,这可能是一项繁琐的任务。@garci:我已经根据您的问题更新了答案中的代码。@garci您应该使用System.IO添加
位于
.cs
文件的顶部。如果您对Visual Studio、C#或.NET还没有足够的基本了解,无法做出这样的决定,我建议您阅读一些有关它的教程: