C# 使用模式XSD读取XML
我在读取xml时遇到了一个问题,该xml是在保存我以前读取的相同模式时创建的 当我读取一个DataTable时,例如Person,它有一行,DataTable会读取该行,但会像所有列一样显示为null,而所有列都不是null 我使用的代码如下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
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。改为创建。