Создание нового объекта в Foreach L oop Все еще только получает атрибуты первого объекта для всех созданных объектов - PullRequest
0 голосов
/ 11 апреля 2020

Я читаю данные из xml файлов и создаю новый объект LogoSatirVeri для каждой InvoiceLine, которая есть в документе. Xml читает правильно, например, для каждого идентификатора строки, xml читает 1,2,3 по порядку, но в списке obje c все объекты имеют одинаковый идентификатор строки, равный 1, а другие атрибуты одинаковы. как первый. Я попытался переместить создание Объекта из foreach l oop, объявив перед foreach l oop и создав его внутри l oop, объявив Xmlnodes внутри l oop, а затем объявив вне l oop. Код ниже и любая помощь приветствуется. Спасибо. PS: код на самом деле длиннее с большим количеством атрибутов, но этой части должно быть достаточно.

                    XmlNodeList elemList = root.GetElementsByTagName("cac:InvoiceLine"); 
                    XmlNodeList SatirdakiIskontoList;
                    Logoveri.logo_satirsayisi = elemList.Count.ToString(); //faturadaki satır sayısı
                    XmlNode satirno1,urunadi,urunkodu,urunmiktari,uruntutari;
                    string satirno;

                    foreach (XmlElement e in elemList)
                    {
                        LOGOSatirVeri Logosatirveri = new LOGOSatirVeri();
                        // Logosatirveri = new LOGOSatirVeri();
                        Logosatirveri.logo_uuid = Logoveri.logo_uuid;

                        try
                        {
                            //MALZEME-HİZMET ADI
                             satirno = e.SelectSingleNode("//*[name()='cac:InvoiceLine']/*[name()='cbc:ID']").InnerText;
                            Logosatirveri.logo_satirno = satirno;
                        }
                        catch { Logosatirveri.logo_satirno = null; }
                        try
                        {  
                            //MALZEME-HİZMET ADI
                            urunadi = e.SelectSingleNode("//*[name()='cac:Item']/*[name()='cbc:Name']");
                            Logosatirveri.logo_malzemeadi = urunadi.InnerText;
                        }
                        catch { Logosatirveri.logo_malzemeadi = null; }
                        try
                        {
                            //MALZEME-HİZMET KODU
                            urunkodu = e.SelectSingleNode("//*[name()='cac:Item']/*[name()='cac:SellersItemIdentification']/*[name()='cbc:ID']");
                            Logosatirveri.logo_malzemekodu = urunkodu.InnerText;
                        }
                        catch { Logosatirveri.logo_malzemekodu = null; }

                        try
                        {
                            //MALZEME-HİZMET MİKTARI
                            urunmiktari = e.SelectSingleNode("//*[name()='cbc:InvoicedQuantity']");
                            Logosatirveri.logo_malzememiktari= urunmiktari.InnerText;
                           Logosatirveri.logo_birimkodu = urunmiktari.Attributes.Item(0).InnerText; //DENE???
                        }
                        catch { Logosatirveri.logo_malzememiktari = null; }

                        try
                        {
                            //MALZEME-HİZMET
                            uruntutari = e.SelectSingleNode("//*[name()='cbc:LineExtensionAmount']");
                            Logosatirveri.logo_tutar = float.Parse(uruntutari.InnerText, CultureInfo.InvariantCulture);
                        }
                        catch { }

                        try
                        {
                            //BİRİM TUTAR
                            Logosatirveri.logo_malzemebirimtutari = float.Parse(e.GetElementsByTagName("cbc:PriceAmount").Item(0).InnerText, CultureInfo.InvariantCulture);
                            //MALZEME BİRİM TUTARI
                        }
                        catch { Logosatirveri.logo_malzemebirimtutari = null; }

                        //HER SATIRIN SONUNDA YARATILAN LOGOSATIRVERİ NESNESİNİ BU LİSTEYE EKLİYOR
                        LogoSatirVeriList.Add(Logosatirveri);
                    }
                    //satırlar bitiyor

Edit1: я пытался использовать Inner Xml, так как я вижу в Visual Studio, что он идет 1,2,3 но строка сатирно не меняется до сих пор.

                            try
                       {
                        //MALZEME-HİZMET ADI
                         satirno = e.SelectSingleNode("//* 
                         [name()='cac:InvoiceLine']/* 
                            [name()='cbc:ID']").InnerXml;
                        Logosatirveri.logo_satirno = satirno;
                    }
...