【发布时间】:2020-09-08 18:14:33
【问题描述】:
我必须用来自多个 XML 文件的 3 个特定 XML 节点数据填充 datagridview。
这是一个例子:
<?xml version='1.0' encoding='iso-8859-1'?>
<retorno>
<mensagem>
<codigo>00001 - Sucesso</codigo>
</mensagem>
<alerta>
</alerta>
<numero_nfse>641</numero_nfse>
<serie_nfse>1</serie_nfse>
<data_nfse>08/09/2020</data_nfse>
<hora_nfse>12:16:10</hora_nfse>
<arquivo_gerador_nfse>688569.xml</arquivo_gerador_nfse>
<cod_verificador_autenticidade>03379569</cod_verificador_autenticidade>
</retorno>
我需要这些获得 3 个标签 - <numero_nfse>、<data_nfse>、<cod_verificador_autenticidade> - 并将它们加载到数据网格视图中。
但是,有更多的 XML 文件,具有相同的标签,我会同时将所有这些文件加载到 datagridview 中。
我编写了下面的代码,如您所见,它不起作用。
string[] arquivos = Directory.GetFiles(@"D:\Documentos\retorno");
DataSet retorno = new DataSet();
for (int j = 0; j < arquivos.Length; j++)
{
FileInfo Xmls = new FileInfo(arquivos[j]);
string caminhoXmls = Convert.ToString(Xmls);
XmlDocument retornoXml = new XmlDocument();
retornoXml.Load(caminhoXmls);
XmlNodeList retornoTags = retornoXml.GetElementsByTagName("retorno");
foreach (XmlNode xn in retornoTags)
{
string XmlNumeroNfse = xn["numero_nfse"].InnerText;
string XmlDataNfse = xn["data_nfse"].InnerText;
string XmlHoraNfse = xn["hora_nfse"].InnerText;
string XmlCodigo = xn["cod_verificador_autenticidade"].InnerText;
}
retorno.ReadXml(caminhoXmls);
dgvDadosNota.DataSource = retorno.Tables[j];
}
澄清一下:我希望每个标签有一列。因此,我的 datagridview 将包含 3 列和与目录中的文件一样多的行。每个 XML 文件中只有一个 <retorno>。
谁能帮帮我?
【问题讨论】:
-
请edit 分享您尝试加载的XML 的(简化)示例——即minimal reproducible example。
GetElementsByTagName()已弃用 BTW:建议您使用XmlNode.SelectNodes或XmlNode.SelectSingleNode方法而不是GetElementsByTagName方法。 -
最好使用 LINQ to XML。
-
您正在为每个文件使用
DataSet和一个DataTable。那是你真正想做的吗?为每个 XML 文件使用具有 3 列和 1 行的单个DataTable不是更有意义吗?当您执行dgvDadosNota.DataSource = retorno.Tables[j];时,您将覆盖以前的绑定,因此您当然只会看到一个结果。 -
我的目标是读取该目录中的每个 XML 文件,获取每个文件中的具体标签并将它们加载到 datagridview 中。
-
@AndréLuis - 每个文件一行,
<numero_nfse>、<data_nfse>和<cod_verificador_autenticidade>各一列?或者每个文件中是否可以有多个<retorno>标签?因为不能将整个DataSet绑定到DataGridView,所以只能绑定特定的DataTable。见How to bind Dataset to DataGridView in windows application。
标签: c# xml datagridview