NAV adatXML beolvasás - Iteráció egy szülőelemen

Címkék
NAV adatXML beolvasás - Iteráció egy szülőelemen
2022-11-10T13:21:21+01:00
2022-11-11T20:14:06+01:00
2022-11-15T08:41:31+01:00
szmolkalaszlo
Sziasztok!

A csatolt XML állományban hogyan tudnék végighaladni az
     <invoiceSummary>
               <summaryNormal>
gyermekelemein, hogy felcsipegessem belőlük az adatokat?

using (FileStream fs = new FileStream(filepath, FileMode.Open)) { var obj = (Invoices)serializer.Deserialize(fs); foreach (var item in obj.Invoice_ChildOf_Ns3Invoices) { // A számla kelte. 'KELT' mező. invoiceDetails = konyvel + item.InvoiceIssueDate + ";"; // A számla teljesítési időpontja 'DATUM' mező. invoiceDetails = invoiceDetails + item.InvoiceMain.Invoice_ChildOf_InvoiceMain.InvoiceHead.InvoiceDetail.InvoiceDeliveryDate + ";";
Elkezdtem így összerakosgatni a szükséges adatokat, de amikor eljutottam a számla áfakódonkénti összegzéséig, megállt a tudomány.
Szóval nem tudok rájönni, hogyan járhatnám be ezt az ágat. A foreach-et nem tudtam munkára bírni, mert nem egy olyan objektumot kapok amikor odaérek, amin működne az iteráció.
Szóval, ismét a segítségeteket kérném és köszönöm előre is!

ui. Igazság szerint az áfakód szerint összegző sorokat én bővítettem egy sorról háromra, de XML validátor szerint valid maradt. Remélem ezzel nem rontottam el a fájlt!
Mutasd a teljes hozzászólást!
<invoiceSummary> <summaryNormal> <summaryByVatRate> ... </summaryByVatRate> <summaryByVatRate> ... <summaryByVatRate> ... </summaryByVatRate> </summaryByVatRate> </summaryNormal> </invoiceSummary>
Szerintem ez így nem helyes, de nem ismerem ezeket a NAV-os XML-eket. Az előző kérdésből ugye megfogadtad kalmanka javaslatát, hogy annak ellenére, hogy XSD-ből hosszú kódot generál, mégis úgy csináld?
Mutasd a teljes hozzászólást!

  • Az az igazság, hogy nem. Azzal tényleg nem tudtam mit kezdeni. Amit te írtál, azzal boldogultam egy darabig, de a generált osztállyal nem tudtam mit kezdeni, teljesen átláthatatlan :)
    Esetleg, ha segítenétek abban, hogy kezdjek hozzá...
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Ezt sikerült megoldani.
    Tulajdonképpen a legelső ilyen témájú kérdésemre H.Lilla által adott válaszból jött a megoldás.
    Tulajdonképpen azért sikerült a számlákon végiglépkedni, mert az xml-ből a számlák egy listába kerülnek és a lista elemein lépked végig a ciklus.
    Ugyanezt alkalmaztam (listába kértem) arra az elemre is, amelyik akár többször is előfordulhat az XML fájlban (de legalább egyszer mindenképpen), aztán egy for ciklussal végiglépkedtem rajta.

    [XmlRoot(ElementName = "summaryByVatRate", Namespace = "http://schemas.nav.gov.hu/OSA/3.0/data")] public class SummaryByVatRate { [XmlElement(ElementName = "vatRate", Namespace = "http://schemas.nav.gov.hu/OSA/3.0/data")] public VatRate VatRate { get; set; } [XmlElement(ElementName = "vatRateNetData", Namespace = "http://schemas.nav.gov.hu/OSA/3.0/data")] public VatRateNetData VatRateNetData { get; set; } [XmlElement(ElementName = "vatRateVatData", Namespace = "http://schemas.nav.gov.hu/OSA/3.0/data")] public VatRateVatData VatRateVatData { get; set; } [XmlElement(ElementName = "vatRateGrossData", Namespace = "http://schemas.nav.gov.hu/OSA/3.0/data")] public VatRateGrossData VatRateGrossData { get; set; } } [XmlRoot(ElementName = "summaryNormal", Namespace = "http://schemas.nav.gov.hu/OSA/3.0/data")] public class SummaryNormal { [XmlElement(ElementName = "summaryByVatRate", Namespace = "http://schemas.nav.gov.hu/OSA/3.0/data")] public List<SummaryByVatRate> SummaryByVatRate { get; set; } [XmlElement(ElementName = "invoiceNetAmount", Namespace = "http://schemas.nav.gov.hu/OSA/3.0/data")] public string InvoiceNetAmount { get; set; } [XmlElement(ElementName = "invoiceNetAmountHUF", Namespace = "http://schemas.nav.gov.hu/OSA/3.0/data")] public string InvoiceNetAmountHUF { get; set; } [XmlElement(ElementName = "invoiceVatAmount", Namespace = "http://schemas.nav.gov.hu/OSA/3.0/data")] public string InvoiceVatAmount { get; set; } [XmlElement(ElementName = "invoiceVatAmountHUF", Namespace = "http://schemas.nav.gov.hu/OSA/3.0/data")] public string InvoiceVatAmountHUF { get; set; } }
    Aztán az elemek indexét használva megkaptam a tartalmazott elemek értékeit. Például:

    for (int i = 0; i < summaryByVatRate_Count; i++){ invoiceDetails = invoiceDetails + (item.InvoiceMain.Invoice_ChildOf_InvoiceMain.InvoiceSummary. SummaryNormal.SummaryByVatRate[i].VatRateNetData.VatRateNetAmount);
    De, ha valaki elmagyarázná, hogyan kell nekikezdeni annak a generált class fájlnak, azt is megköszönném.
    Mutasd a teljes hozzászólást!
Címkék
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd