我的应用程序中有很多数据表,其中一些需要从xmls导入。除了一个readxml函数之外,每个readxml函数都运行良好。
以下是一些xml内容;
<dtSysStat>
<ST>2017-11-28T21:14:58+03:00</ST>
<INST_ID>1</INST_ID>
<RM>1.34</RM>
<WM>0.04</WM>
<RR>86</RR>
<WR>2</WR>
<TR>0</TR>
</dtSysStat>
这是数据表结构;
dtSysStatTemp.Columns.Add("ST", typeof(DateTime));
dtSysStatTemp.Columns.Add("INST_ID", typeof(int));
dtSysStatTemp.Columns.Add("RM", typeof(double));
dtSysStatTemp.Columns.Add("WM", typeof(double));
dtSysStatTemp.Columns.Add("RR", typeof(double));
dtSysStatTemp.Columns.Add("WR", typeof(double));
dtSysStatTemp.Columns.Add("TR", typeof(double));
这是阅读部分;
dtSysStatTemp.TableName = "dtSysStat";
dtSysStatTemp.ReadXml(AppDomain.CurrentDomain.BaseDirectory + pathnameicustom);
我还从dtsysstat数据表结构中编写了这个xml。所以我确信架构结构是一样的。
我不知道为什么我得到'DataTable不支持架构推断'错误。因为readxml的所有其他数据表都可以正常工作。
我想在不使用数据集
的情况下执行此操作答案 0 :(得分:1)
您可以使用数据集尝试以下操作。
DataSet ds = new DataSet();
ds.ReadXml("testfile.xml");
DataTable dt = ds.Tables["dtSysStat"];
return dt.Rows[0]["ST"].ToString();
Alt解决方案(添加ReadXmlSchema):
dtSysStatTemp.TableName = "dtSysStat";
dtSysStatTemp.ReadXmlSchema(AppDomain.CurrentDomain.BaseDirectory + pathnameicustom);
dtSysStatTemp.ReadXml(AppDomain.CurrentDomain.BaseDirectory + pathnameicustom);
答案 1 :(得分:0)
< ST > < /ST>
正确:<ST> </ST>
。DataSet
而非DataTable
- DataTable不支持架构
来自Xml的推论。我测试了它,它按预期工作:
private void XmlToDataset()
{
DataSet dsysStatTemp = new DataSet();
XmlDocument doc = new XmlDocument();
string xmlString = @"<dtSysStat>
<ST> 2017 - 11 - 28T21: 14:58 + 03:00 </ST>
<INST_ID> 1 </INST_ID>
<RM> 1.34 </RM>
<WM> 0.04 </WM>
<RR> 86 </RR>
<WR> 2 </WR>
<TR> 0 </TR>
</dtSysStat>";
doc.Load(new StringReader(xmlString));
XmlTextReader xtr = new XmlTextReader(doc.OuterXml, XmlNodeType.Element, null);
dsysStatTemp.ReadXml(xtr);
MessageBox.Show(dsysStatTemp.Tables[0].Rows[0]["ST"].ToString());
}