从xml中分配Dataset中的默认值

时间:2012-01-12 14:14:35

标签: c# crystal-reports dataset xsd

我有这个文件:

<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>

请注意,第二个标签“det”中不存在标签“IPI”。

我需要使用此文件填充数据集,并确保填充所有标记。

我正在尝试这个:

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"); 
}

第二行没有标记,因为标记“IPI”包含在第一个标记“det”中。 - IMO

如何手动填写第二条记录?

1 个答案:

答案 0 :(得分:0)

虽然它有点偏离主题,但我建议使用带有xml的类型化数据集。 关于此的一篇文章在这里:http://www.codeproject.com/KB/database/XmlToTypedDataSet.aspx

如果你不需要数据集,我认为更好的方法是使用生成的xsd来生成类,从中可以序列化xml,反之亦然,命令行看起来像:

  

xsd.exe your.xsd / classes

我想更多关于这一点:http://www.codeproject.com/KB/XML/Serialization.aspx

事情是,使用类型化数据集/或序列化类将更容易编写和读取代码,并且您将自动获得答案:)