我有一个销售量很大的XML文件,并且在销售量中我有多个项目。 问题是:我找不到要在产品上进行迭代的解决方案
将销售分成“ CFe”标签。我正在对该标签进行迭代,当我到达商品标签时,我会尝试再次进行迭代,但仅对单个商品进行迭代。
我只注意到在nCFe 120476中有5个项目。
这是代码
foreach (var file in files)
{
if (Path.GetExtension(file) == ".xml")
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(file);
XmlNodeList cfes = xmlDoc.GetElementsByTagName("CFe");
foreach (XmlNode cfe in cfes)
{
XmlNode infcfe = cfe.ChildNodes[0];
string UF = infcfe["ide"]["cUF"].InnerText;
string NF = infcfe["ide"]["cNF"].InnerText;
string nCFe = infcfe["ide"]["nCFe"].InnerText;
DateTime dataMovimento = DateTime.ParseExact(infcfe["ide"]["dEmi"].InnerText, "yyyyMMdd", CultureInfo.CurrentCulture);
foreach (XmlNode node in infcfe["det"])
{
if (node.Name == "prod")
{
string cProd = node["cProd"].InnerText;
string xProd = node["xProd"].InnerText;
string Ncm = node["NCM"].InnerText;
}
if (node.Name == "imposto")
{
string elementName = node.ChildNodes[1].InnerXml.Substring(1,9);
}
}
}
}
}
我认为问题出在这里: foreach(infcfe [“ det”]中的XmlNode节点) 当我通过infcfe [“ det”]调试时,我有2个项目,而XML文件有5个项目。
这是XML的一部分:
<?xml version="1.0" encoding="UTF-8"?>
<CFe>
<infCFe Id="CFe35190421029223000151590001665441204767790071" versao="0.07" versaoDadosEnt="0.07" versaoSB="020202">
<ide>
<cUF>35</cUF>
<cNF>779007</cNF>
<mod>59</mod>
<nserieSAT>000166544</nserieSAT>
<nCFe>120476</nCFe>
<dEmi>20190401</dEmi>
<hEmi>090447</hEmi>
<cDV>1</cDV>
<tpAmb>1</tpAmb>
<CNPJ>06061935000164</CNPJ>
<signAC>oQhV07GRMasCrhXO0qKsmepn4uRI+4NAkRoa2KphkevrSE4v20XerMgvglL4vK5rgRvXLZnaaMljWHspRMvt6Lwy5d3r+en0kabhTPR7yGVbkxX07QX0YylvCcCKnzuYAtnZAuYB7hdGx1Mfhuv6RgvNxJ+sew+rm9OWuInwgzazBNct7+soq4c33sfJ44NZxVyibgcJjQrzgKgLL9QchMwuthisLldNo6YLJRBLO+q3tVjW6zRe+KtrLcC/7y1N2Vi6klAfLusKQW4c7ONYfuP00IdzOkqNs6l4Iy2Ev5HwQWJLTPmtf/EDbxe4w0/Qw1LQjKybxo4TfOSYBKWQgw==</signAC>
<assinaturaQRCODE>ZWhhIV0gYXmm+xhn/x9j1HsR3VGc2A+BGCyu2uhC3KJeyh92I+WWVmfpig+FjQbJp2MmBo1qo9oTVe8smDTfi8rNW4nNogMhO3SC3Uj7PcFUSEzH5eVgefUgWsSqVMBafkhOAtjTE563u21mcSUm7VL9E/bYaJz/SQBQUZNOfVlSmIXsact6eYYAuMPdnNNnWYIUV32PEInfK4/GNw0SZ6AKt90s28+AeueTJQZ3vZ7J+OpA+ZFf4x2H2cPaNIzPSdWyb/nkg7yP+MAlm2ZBMSvcTxDCRhWgo/EuJkOII7QY5K2Memgp4kQO6fgkNNCJI0LBEUHzhEf1IKdxagxKHQ==</assinaturaQRCODE>
<numeroCaixa>001</numeroCaixa>
</ide>
<emit>
<CNPJ>21029223000151</CNPJ>
<xNome>EMPORIO E PADARIA SANTO ANTONIO EIRELI</xNome>
<enderEmit>
<xLgr>RUA DOUTOR CUNHA MOREIRA</xLgr>
<nro>37</nro>
<xCpl>LETRA A</xCpl>
<xBairro>ENCRUZILHADA</xBairro>
<xMun>SANTOS</xMun>
<CEP>11050240</CEP>
</enderEmit>
<IE>633502394110</IE>
<cRegTrib>1</cRegTrib>
<indRatISSQN>N</indRatISSQN>
</emit>
<dest />
<det nItem="1">
<prod>
<cProd>89</cProd>
<cEAN>7891000073018</cEAN>
<xProd>IOG NESTLE NAT DESN 160G</xProd>
<NCM>04031000</NCM>
<CFOP>5102</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>2.79</vUnCom>
<vProd>2.79</vProd>
<indRegra>A</indRegra>
<vItem>2.79</vItem>
<obsFiscoDet xCampoDet="Cod. CEST">
<xTextoDet>1703100</xTextoDet>
</obsFiscoDet>
</prod>
<imposto>
<vItem12741>1.11</vItem12741>
<ICMS>
<ICMSSN900>
<Orig>0</Orig>
<CSOSN>900</CSOSN>
<pICMS>18.00</pICMS>
<vICMS>0.50</vICMS>
</ICMSSN900>
</ICMS>
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>
</imposto>
</det>
<det nItem="2">
<prod>
<cProd>185</cProd>
<cEAN>7898994081623</cEAN>
<xProd>TAPI DA TERRI 500G</xProd>
<NCM>19030000</NCM>
<CFOP>5405</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>6.49</vUnCom>
<vProd>6.49</vProd>
<indRegra>A</indRegra>
<vItem>6.49</vItem>
<obsFiscoDet xCampoDet="Cod. CEST">
<xTextoDet>1703100</xTextoDet>
</obsFiscoDet>
</prod>
<imposto>
<vItem12741>2.32</vItem12741>
<ICMS>
<ICMSSN102>
<Orig>0</Orig>
<CSOSN>500</CSOSN>
</ICMSSN102>
</ICMS>
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>
</imposto>
</det>
<det nItem="3">
<prod>
<cProd>3487</cProd>
<cEAN>7898934605063</cEAN>
<xProd>OVOS BCO ANTUNES DUZIA</xProd>
<NCM>04072100</NCM>
<CFOP>5405</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>6.99</vUnCom>
<vProd>6.99</vProd>
<indRegra>A</indRegra>
<vItem>6.99</vItem>
<obsFiscoDet xCampoDet="Cod. CEST">
<xTextoDet>1703100</xTextoDet>
</obsFiscoDet>
</prod>
<imposto>
<vItem12741>1.99</vItem12741>
<ICMS>
<ICMSSN102>
<Orig>0</Orig>
<CSOSN>500</CSOSN>
</ICMSSN102>
</ICMS>
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>
</imposto>
</det>
<det nItem="4">
<prod>
<cProd>1585</cProd>
<xProd>PERA WILIANS KG</xProd>
<NCM>08083000</NCM>
<CFOP>5102</CFOP>
<uCom>KG</uCom>
<qCom>0.1400</qCom>
<vUnCom>9.98</vUnCom>
<vProd>1.40</vProd>
<indRegra>A</indRegra>
<vItem>1.40</vItem>
<obsFiscoDet xCampoDet="Cod. CEST">
<xTextoDet>1703100</xTextoDet>
</obsFiscoDet>
</prod>
<imposto>
<vItem12741>0.40</vItem12741>
<ICMS>
<ICMSSN900>
<Orig>0</Orig>
<CSOSN>900</CSOSN>
<pICMS>18.00</pICMS>
<vICMS>0.25</vICMS>
</ICMSSN900>
</ICMS>
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>
</imposto>
</det>
<det nItem="5">
<prod>
<cProd>7400</cProd>
<xProd>MAÇA GALA KG</xProd>
<NCM>08081000</NCM>
<CFOP>5102</CFOP>
<uCom>KG</uCom>
<qCom>0.2300</qCom>
<vUnCom>4.99</vUnCom>
<vProd>1.15</vProd>
<indRegra>A</indRegra>
<vItem>1.15</vItem>
<obsFiscoDet xCampoDet="Cod. CEST">
<xTextoDet>1703100</xTextoDet>
</obsFiscoDet>
</prod>
<imposto>
<vItem12741>0.16</vItem12741>
<ICMS>
<ICMSSN900>
<Orig>0</Orig>
<CSOSN>900</CSOSN>
<pICMS>18.00</pICMS>
<vICMS>0.21</vICMS>
</ICMSSN900>
</ICMS>
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>
</imposto>
</det>
<total>
<ICMSTot>
<vICMS>0.96</vICMS>
<vProd>18.82</vProd>
<vDesc>0.00</vDesc>
<vPIS>0.00</vPIS>
<vCOFINS>0.00</vCOFINS>
<vPISST>0.00</vPISST>
<vCOFINSST>0.00</vCOFINSST>
<vOutro>0.00</vOutro>
</ICMSTot>
<vCFe>18.82</vCFe>
<vCFeLei12741>5.98</vCFeLei12741>
</total>
<pgto>
<MP>
<cMP>99</cMP>
<vMP>18.82</vMP>
</MP>
<vTroco>0.00</vTroco>
</pgto>
<infAdic>
<obsFisco xCampo="04.04.05.04">
<xTexto>Comete crime quem sonega</xTexto>
</obsFisco>
</infAdic>
</infCFe>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<Reference URI="#CFe35190421029223000151590001665441204767790071">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<DigestValue>9jMP+hE/hSo+AYgCxuewOnLA5FdsYidYAAkG3NDmkxQ=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>b2nB7FTBNSzubhYBqPEBf5VoXh5BsKA/HiYSBB4ohSq8Lv7wPpoQz8VsIQ9harmkCLozPPu88N00oHLYIlgJbwf9Bc70Gz9aTfNtnDqrN/qYJ+w/NhvNabp6XQyx0nnmX2XiSmZ56zJ0nded1J9P5nau/+N5M/OJGlMHQERk+Z+tsYMfElI70i46fDzJB0ncRGHvT8JTPTnr5HsbBniFhad9njkhvanaYAl9NwWgBlkQjXBZ+86to11djS+/yu22TvoNm8gv2QnBjOVAJUC2z/gbfHJVzkRvM4urCjqMNpibn127Eyj6h1aiSnvmBKESEBXq9JZWKyyIwE7Y1gV8aw==</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>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</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</CFe>
答案 0 :(得分:1)
欢迎来到stackoverflow! 使用迭代器只会给您第一个子元素。 我相信您需要使用XmlNode.SelectNodes Method。 修改您的代码,如下所示:
foreach (XmlNode node in infcfe.SelectNodes("det"))
{
//...
}
答案 1 :(得分:0)
使用Xml Linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
namespace ConsoleApplication3
{
class Program1
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
List<XElement> infCFes = doc.Descendants("infCFe").ToList();
foreach (XElement infCFe in infCFes)
{
CFE newCFE = new CFE();
CFE.cfes.Add(newCFE);
XElement ide = infCFe.Descendants("ide").FirstOrDefault ();
newCFE.cUF = (int)ide.Element("cUF");
List<XElement> xDets = infCFe.Descendants("det").ToList();
foreach (XElement xDet in xDets)
{
Product newProduct = new Product();
newCFE.products.Add(newProduct);
newProduct.nItem = (int)xDet.Attribute("nItem");
XElement prod = xDet.Element("prod");
newProduct.cProd = (int)prod.Element("cProd");
newProduct.cEAN = (string)prod.Element("cEAN");
newProduct.xProd = (string)prod.Element("xProd");
newProduct.ncm = (string)prod.Element("NCM");
newProduct.cfop = (int)prod.Element("CFOP");
newProduct.uCom = (string)prod.Element("uCom");
newProduct.qCom = (decimal)prod.Element("qCom");
newProduct.vUnCom = (decimal)prod.Element("vUnCom");
newProduct.vProd = (decimal)prod.Element("vProd");
newProduct.indRegra = (string)prod.Element("indRegra");
newProduct.vItem = (decimal)prod.Element("vItem");
XElement obsFiscoDet = prod.Element("obsFiscoDet");
newProduct.xCampoDet = (string)obsFiscoDet.Attribute("xCampoDet");
newProduct.xTextoDet = (string)obsFiscoDet.Element("xTextoDet");
XElement imposto = xDet.Element("imposto");
newProduct.vItem12741 = (decimal)imposto.Element("vItem12741");
newProduct.orig = (int)imposto.Descendants("Orig").FirstOrDefault();
newProduct.CSOSN = (int)imposto.Descendants("CSOSN").FirstOrDefault();
newProduct.pICMS = (decimal?)imposto.Descendants("pICMS").FirstOrDefault();
newProduct.vICMS = (decimal?)imposto.Descendants("vICMS").FirstOrDefault();
XElement pis = imposto.Element("PIS");
newProduct.pissn_cst = (int)imposto.Descendants("CST").FirstOrDefault();
XElement cofins = imposto.Element("COFINS");
newProduct.cofinssn_cst = (int)cofins.Descendants("CST").FirstOrDefault();
}
}
}
}
public class CFE
{
public static List<CFE> cfes = new List<CFE>();
public int cUF { get; set; }
public List<Product> products = new List<Product>();
}
public class Product
{
public int nItem { get; set; }
public int cProd { get; set; }
public string cEAN { get; set; }
public string xProd { get; set; }
public string ncm { get; set; }
public int cfop { get; set; }
public string uCom { get; set; }
public decimal qCom { get; set; }
public decimal vUnCom { get; set; }
public decimal vProd { get; set; }
public string indRegra { get; set; }
public decimal vItem { get; set; }
public string xCampoDet { get; set; }
public string xTextoDet { get; set; }
public decimal vItem12741 { get; set; }
public int orig { get; set; }
public int CSOSN { get; set; }
public decimal? pICMS { get; set; }
public decimal? vICMS { get; set; }
public int pissn_cst { get; set; }
public int cofinssn_cst { get; set; }
}
}