首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对XML进行迭代,并获得大量销售数据

对XML进行迭代,并获得大量销售数据
EN

Stack Overflow用户
提问于 2019-05-22 00:36:14
回答 2查看 93关注 0票数 1

我有一个包含大量销售的XML文件,并且在销售中我有多个项目要销售。问题是:我找不到迭代产品的解决方案

销售量在"CFe“标签下分开显示。我在这个标签上迭代,当我到达items标签时,我尝试再次迭代,但只迭代一个项目。

我只注意到在nCFe 120476中有5个项目。

下面是代码

代码语言:javascript
复制
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的一部分:

代码语言:javascript
复制
    <?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>
EN

回答 2

Stack Overflow用户

发布于 2019-05-22 00:52:31

欢迎来到stackoverflow!使用迭代器只给出第一个子元素。我相信你需要使用XmlNode.SelectNodes Method。如下所示修改您的代码:

代码语言:javascript
复制
foreach (XmlNode node in infcfe.SelectNodes("det"))
{
    //...
}
票数 1
EN

Stack Overflow用户

发布于 2019-05-22 01:51:22

使用Xml Linq:

代码语言:javascript
复制
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; }

    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56242787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档