C# 从xml在数据集中指定默认值
我有这个档案:C# 从xml在数据集中指定默认值,c#,crystal-reports,dataset,xsd,C#,Crystal Reports,Dataset,Xsd,我有这个档案: <infNFe versao="2.00"> <ide> <cUF>35</cUF> <cNF>10123856</cNF> ... </ide> <det nItem="1"> <prod> ... </prod> &
<infNFe versao="2.00">
<ide>
<cUF>35</cUF>
<cNF>10123856</cNF>
...
</ide>
<det nItem="1">
<prod>
...
</prod>
<imposto>
<ICMS>
...
</ICMS>
<IPI>
<cEnq>999</cEnq>
<IPITrib>
<CST>49</CST>
<vBC>29.40</vBC>
...
</IPITrib>
</IPI>
</imposto>
</det>
<det nItem="2">
<prod>
...
</prod>
<imposto>
<ICMS>
...
</ICMS>
</imposto>
</det>
</infNFe>
第二行没有标记,因为标记“IPI”包含在第一个标记“det.”-IMO中
如何手动填充第二条记录?虽然有点离题,但我建议使用xml类型的数据集。 这里有一篇关于这方面的文章: 如果您不需要数据集,我认为更好的方法是使用生成的xsd生成类,从中可以序列化xml,反之亦然,命令行如下所示: xsd.exe您的.xsd/classes 我在这里想得更多:
事实是,使用类型化数据集/或序列化类将更容易编写和读取代码,您将自动得到答案:)我需要数据集发送到Crystal Reports,它需要一个没有空标记/字段的数据集。据我所知,Crystal Reports也可以处理普通对象。
DataSet ds = new DataSet();
ds.ReadXml(arquivo);
if (ds.Tables["IPI"] == null)
{
ds.Tables.Add("IPI");
}
if (ds.Tables["IPITrib"] == null) {
ds.Tables.Add("IPITrib");
}
if (ds.Tables["IPITrib"].Columns["vIPI"] == null)
{
ds.Tables["IPITrib"].Columns.Add("vIPI");
}