XML文档中出现错误(1,1)。读取文本文件时

XML文档中出现错误(1,1)。读取文本文件时,xml,Xml,我有一段代码,允许用户读取文本文件或XML文件 当他选择文本文件时工作正常,但当他选择XML文件时 显示此错误: XML文档中出现错误(1,1) 这是我的代码: OpenFileDialog op = new OpenFileDialog(); op.Filter = "XML|*.xml|text|*.txt"; if (op.FilterIndex == 1) { if (op.ShowDialog() == DialogResult.OK) { Strea

我有一段代码,允许用户读取文本文件或XML文件 当他选择文本文件时工作正常,但当他选择XML文件时 显示此错误: XML文档中出现错误(1,1)

这是我的代码:

OpenFileDialog op = new OpenFileDialog();
op.Filter = "XML|*.xml|text|*.txt";

if (op.FilterIndex == 1)
{
    if (op.ShowDialog() == DialogResult.OK)
    {
        StreamReader Infile = new StreamReader(op.FileName);
        XmlSerializer Des = new XmlSerializer(typeof(List<classname>));
        Program.ListStudent = (List<classname>)Des.Deserialize(Infile);
        Infile.Close();
    }
}
else
{
    if (op.FilterIndex == 2)
    {
        if (op.ShowDialog() == DialogResult.OK)
        {
            StreamReader Infile = new StreamReader(op.FileName);
            string header = Infile.ReadLine();

            while (!Infile.EndOfStream)
            {
                string line = Infile.ReadLine();
                string[] parts = line.Split(new char[] { '\t' }, System.StringSplitOptions.RemoveEmptyEntries);
                s.Id = Convert.ToInt64(parts[0]);
                s.Fname = parts[1];
                s.Lname = parts[2];
                Program.ListStudent.Add(s);
            }
            Infile.Close();
        }
    }
}
OpenFileDialog op=newopenfiledialog();
op.Filter=“XML |*.XML | text |*.txt”;
如果(op.FilterIndex==1)
{
if(op.ShowDialog()==DialogResult.OK)
{
StreamReader infle=新的StreamReader(op.FileName);
XmlSerializer Des=新的XmlSerializer(typeof(List));
Program.ListStudent=(List)Des.反序列化(infle);
infle.Close();
}
}
其他的
{
如果(op.FilterIndex==2)
{
if(op.ShowDialog()==DialogResult.OK)
{
StreamReader infle=新的StreamReader(op.FileName);
字符串头=infle.ReadLine();
而(!infle.EndOfStream)
{
字符串行=infle.ReadLine();
string[]parts=line.Split(新字符[]{'\t'},System.StringSplitOptions.RemoveEmptyEntries);
s、 Id=转换为64(部分[0]);
s、 Fname=零件[1];
s、 Lname=零件[2];
Program.ListStudent.Add(s);
}
infle.Close();
}
}
}
这是XML文件


;  12345穆罕默德·阿里
试试这个

首先,您的XML似乎无效,我不知道您是否得到了“;”但是他们不应该在那里

下面是一些将XML反序列化为列表的代码

使用

using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.IO;
班级

[XmlRoot(ElementName = "Student")]
public class Student
{
    [XmlElement(ElementName = "Id")]
    public string Id { get; set; }
    [XmlElement(ElementName = "Fname")]
    public string Fname { get; set; }
    [XmlElement(ElementName = "Lname")]
    public string Lname { get; set; }
}
代码

类程序
{
静态void Main(字符串[]参数)
{
尝试
{
List deserializedList=新列表();
反序列化列表=反序列化();
}//在这里放置一个断点,然后将鼠标移到反序列化列表上
捕获(例外)
{
投掷;
}
}
私有静态T反序列化(),其中T:new()
{
//创建一个T的实例
T returnListSoft=CreateInstance();
//创建用于读取XML文件的新文件流
使用(FileStream ReadFileStream=newfilestream(“xml.xml”,FileMode.Open,FileAccess.Read,FileShare.Read))
{
//构造一个XmlSerializer并使用它
//从流中序列化数据。
XmlSerializer SerializerObj=新的XmlSerializer(typeof(T));
尝试
{
//从文件中反序列化哈希表
returnListSoft=(T)SerializerObj.Deserialize(ReadFileStream);
}
捕获(例外情况除外)
{
WriteLine(string.Format(“序列化失败。原因:{0}”,ex.Message));
}
}
//返回反序列化的数据。
ReturnListOfT;
}
//函数创建T的实例
公共静态T CreateInstance(),其中T:new()
{
return(T)Activator.CreateInstance(typeof(T));
}
}
下面是您的XML应该是什么样子

<ArrayOfStudent xmlns:xsi="w3.org/2001/XMLSchema-instance"  xmlns:xsd="w3.org/2001/XMLSchema">
<Student>
    <Id>12345</Id>
    <Fname>Mohammad</Fname>
    <Lname>Ali</Lname>
</Student>
</ArrayOfStudent>

12345
穆罕默德
阿里

将XML保存到一个名为XML.XML的文件中,该文件与应用程序*.exe

位于同一文件夹中。很抱歉,我的错误是2,同样的问题需要查看读取的实际XML,但第一个猜测是它缺少XML序言,XML的第一行可能是:
不要将其放在注释中。你需要将你的问题添加到那里,在那里可以看到并正确格式化。
<ArrayOfStudent xmlns:xsi="w3.org/2001/XMLSchema-instance"  xmlns:xsd="w3.org/2001/XMLSchema">
<Student>
    <Id>12345</Id>
    <Fname>Mohammad</Fname>
    <Lname>Ali</Lname>
</Student>
</ArrayOfStudent>