C# 使用模式XSD读取XML

C# 使用模式XSD读取XML,c#,.net,xml,xsd,C#,.net,Xml,Xsd,我在读取xml时遇到了一个问题,该xml是在保存我以前读取的相同模式时创建的 当我读取一个DataTable时,例如Person,它有一行,DataTable会读取该行,但会像所有列一样显示为null,而所有列都不是null 我使用的代码如下 private DataSet LoadShema(string path) { string _archivoXsd = System.AppDomain.CurrentDomain.BaseDirectory +"Scheme.xsd";//H

我在读取xml时遇到了一个问题,该xml是在保存我以前读取的相同模式时创建的

当我读取一个DataTable时,例如Person,它有一行,DataTable会读取该行,但会像所有列一样显示为null,而所有列都不是null

我使用的代码如下

private DataSet LoadShema(string path)
{
    string _archivoXsd = System.AppDomain.CurrentDomain.BaseDirectory +"Scheme.xsd";//HERE IS WHERE THE .XSD FILE IS

    DataSet esquemaXSD = new DataSet();
    string archivoXml = path;
    FileStream FsXSD = new FileStream(_archivoXsd, FileMode.Open);
    FileStream FsXML = new FileStream(archivoXml, FileMode.Open);

    XmlTextReader xtrXSD = new XmlTextReader(FsXSD);
    try
    {
        esquemaXSD.ReadXmlSchema(xtrXSD);
        xtrXSD.Close();
        FsXSD.Close();

        XmlTextReader xtrXML = new XmlTextReader(FsXML);
        esquemaXSD.ReadXml(xtrXML);
        xtrXML.Close();
        FsXML.Close();
    }
    catch
    {
    }
    return esquemaXSD;
}
这就是我在方案中加载xml的方式,然后我要做的另一件事是分配:

_dtPerson = new DataTable();
_dtPerson = esquemaXSD.Tables["Person"];
最后,我要做的是:

if (_dtPerson.Rows.Count == 1)
{
    string name = Convert.ToString(_dtPerson.Rows[0]["Name"]); 
}

当我执行最后一行代码时,出现了一个异常,表示“无法将DBNull对象转换为其他类型”。

是否介意将xsd/xml文件添加到您正在读取的xml文件中是Name元素null还是甚至存在?名称元素1的nillable是否设置为true。删除try/catch块-它阻止您看到任何异常。2.您的两个
FileStream
实例和两个
XmlReader
实例需要位于
using
块中。3.不要使用
新的XmlTextReader()
。自.NET2.0以来,它一直被弃用。使用
XmlReader。改为创建