Назначить значения по умолчанию в наборе данных из XML - PullRequest
0 голосов
/ 12 января 2012

У меня есть этот файл:

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

Мне нужно заполнить набор данных этим файлом и убедиться, что все теги заполнены.

Я пытаюсь это:

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». - ИМО

Как заполнить вторую запись вручную?

1 Ответ

0 голосов
/ 12 января 2012

Хотя это немного не по теме, но я бы предложил использовать типизированные наборы данных с xml. Одна статья об этом здесь: http://www.codeproject.com/KB/database/XmlToTypedDataSet.aspx

Если вам не нужны наборы данных, я думаю, что еще лучше использовать сгенерированный xsd для создания классов, из которых можно сериализовать xml и наоборот, командная строка будет выглядеть так:

xsd.exe your.xsd / classes

Я думаю, что больше об этом здесь: http://www.codeproject.com/KB/XML/Serialization.aspx

Дело в том, что с типизированными наборами данных / или сериализованными классами будет намного легче писать и читать код, и вы получите свой ответ автоматически:)

...