Home > Blockchain >  i have to convert an xml file to csv in php but it has to have a specific looking output
i have to convert an xml file to csv in php but it has to have a specific looking output

Time:10-06

sorry if the post is constructed poorly, I'm new to all of this and am still learning.

from my understanding, the first row has to be the tags names and the second row, their values. Since I'm a beginner it's really hard to wrap my head around how to take that array and fit it into one row in one cell. from my output, the first 10 rows should also not be there, but I have no clue how to skip them when making the array.

This is the PHP code that I used for the result:

<?php
$xmlraw = 'plik_wejsciowy.xml';
   
if (file_exists($xmlraw)) {
      
    $xml_content = simplexml_load_file($xmlraw);
      
    $a = fopen('plik_wyjściowy.csv', 'w');
      
    Csv($xml_content, $a);
      
    fclose($a);
}
  
    function Csv($xml_content, $a)
    {
        foreach ($xml_content->children() as $item) {
            $hasChild = (count($item->children()) > 0) ? true : false;
            if (!$hasChild) {
                $array = array($item->getName(), $item);
                fputcsv($a, $array, ',','"');
            } else {
                Csv($item, $a);
            }
        }
    }
?>

This is the xml file:

<?xml version="1.0" encoding="UTF-8"?>
<JPK xmlns:tns="http://crd.gov.pl/wzor/2021/12/27/11149/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2021/06/08/eD/DefinicjeTypy/" xsi:schemaLocation="http://crd.gov.pl/wzor/2021/12/27/11149/schemat.xsd">
    <Naglowek>
        <KodFormularza kodSystemowy="JPK_V7K (2)" wersjaSchemy="1-0E">JPK_VAT</KodFormularza>
        <WariantFormularza>2</WariantFormularza>
        <DataWytworzeniaJPK>2022-01-01T00:00:00Z</DataWytworzeniaJPK>
        <NazwaSystemu>a</NazwaSystemu>
        <CelZlozenia poz="P_7">2</CelZlozenia>
        <KodUrzedu>1430</KodUrzedu>
        <Rok>2022</Rok>
        <Miesiac>1</Miesiac>
    </Naglowek>
    <Podmiot1 rola="Podatnik">
        <OsobaFizyczna>
            <etd:NIP>1010000000</etd:NIP>
            <etd:ImiePierwsze>a</etd:ImiePierwsze>
            <etd:Nazwisko>a</etd:Nazwisko>
            <etd:DataUrodzenia>1900-01-01</etd:DataUrodzenia>
            <Email>!@"</Email>
            <Telefon>a</Telefon>
        </OsobaFizyczna>
    </Podmiot1>
    <Ewidencja>
        <SprzedazWiersz>
            <LpSprzedazy>1</LpSprzedazy>
            <KodKrajuNadaniaTIN>BB</KodKrajuNadaniaTIN>
            <NrKontrahenta>a</NrKontrahenta>
            <NazwaKontrahenta>a</NazwaKontrahenta>
            <DowodSprzedazy>a</DowodSprzedazy>
            <DataWystawienia>2006-01-01</DataWystawienia>
            <DataSprzedazy>2006-01-01</DataSprzedazy>
            <TypDokumentu>WEW</TypDokumentu>
            <GTU_01>1</GTU_01>
            <WSTO_EE>1</WSTO_EE>
            <IED>1</IED>
            <TP>1</TP>
            <TT_WNT>1</TT_WNT>
            <TT_D>1</TT_D>
            <MR_T>1</MR_T>
            <MR_UZ>1</MR_UZ>
            <I_42>1</I_42>
            <I_63>1</I_63>
            <B_SPV>1</B_SPV>
            <B_SPV_DOSTAWA>1</B_SPV_DOSTAWA>
            <B_MPV_PROWIZJA>1</B_MPV_PROWIZJA>
            <KorektaPodstawyOpodt>1</KorektaPodstawyOpodt>
            <TerminPlatnosci>2016-01-01</TerminPlatnosci>
            <K_10>0</K_10>
            <SprzedazVAT_Marza>0</SprzedazVAT_Marza>
        </SprzedazWiersz>
        <SprzedazWiersz>
            <LpSprzedazy>2</LpSprzedazy>
            <KodKrajuNadaniaTIN>CC</KodKrajuNadaniaTIN>
            <NrKontrahenta>b</NrKontrahenta>
            <NazwaKontrahenta>b</NazwaKontrahenta>
            <DowodSprzedazy>b</DowodSprzedazy>
            <DataWystawienia>2006-01-01</DataWystawienia>
            <DataSprzedazy>2006-01-01</DataSprzedazy>
            <TypDokumentu>WEW</TypDokumentu>
            <GTU_01>1</GTU_01>
            <WSTO_EE>1</WSTO_EE>
            <IED>1</IED>
            <TP>1</TP>
            <TT_WNT>1</TT_WNT>
            <TT_D>1</TT_D>
            <MR_T>1</MR_T>
            <MR_UZ>1</MR_UZ>
            <I_42>1</I_42>
            <I_63>1</I_63>
            <B_SPV>1</B_SPV>
            <B_SPV_DOSTAWA>1</B_SPV_DOSTAWA>
            <B_MPV_PROWIZJA>1</B_MPV_PROWIZJA>
            <KorektaPodstawyOpodt>1</KorektaPodstawyOpodt>
            <TerminPlatnosci>2016-01-01</TerminPlatnosci>
            <K_10>0</K_10>
            <SprzedazVAT_Marza>0</SprzedazVAT_Marza>
        </SprzedazWiersz>
        <SprzedazWiersz>
            <LpSprzedazy>3</LpSprzedazy>
            <KodKrajuNadaniaTIN>DD</KodKrajuNadaniaTIN>
            <NrKontrahenta>c</NrKontrahenta>
            <NazwaKontrahenta>c</NazwaKontrahenta>
            <DowodSprzedazy>c</DowodSprzedazy>
            <DataWystawienia>2006-01-01</DataWystawienia>
            <DataSprzedazy>2006-01-01</DataSprzedazy>
            <TypDokumentu>WEW</TypDokumentu>
            <GTU_01>1</GTU_01>
            <WSTO_EE>1</WSTO_EE>
            <IED>1</IED>
            <TP>1</TP>
            <TT_WNT>1</TT_WNT>
            <TT_D>1</TT_D>
            <MR_T>1</MR_T>
            <MR_UZ>1</MR_UZ>
            <I_42>1</I_42>
            <I_63>1</I_63>
            <B_SPV>1</B_SPV>
            <B_SPV_DOSTAWA>1</B_SPV_DOSTAWA>
            <B_MPV_PROWIZJA>1</B_MPV_PROWIZJA>
            <KorektaPodstawyOpodt>1</KorektaPodstawyOpodt>
            <TerminPlatnosci>2016-01-01</TerminPlatnosci>
            <K_10>0</K_10>
            <SprzedazVAT_Marza>0</SprzedazVAT_Marza>
        </SprzedazWiersz>
        <SprzedazWiersz>
            <LpSprzedazy>4</LpSprzedazy>
            <KodKrajuNadaniaTIN>EE</KodKrajuNadaniaTIN>
            <NrKontrahenta>d</NrKontrahenta>
            <NazwaKontrahenta>d</NazwaKontrahenta>
            <DowodSprzedazy>d</DowodSprzedazy>
            <DataWystawienia>2006-01-01</DataWystawienia>
            <DataSprzedazy>2006-01-01</DataSprzedazy>
            <TypDokumentu>WEW</TypDokumentu>
            <GTU_01>1</GTU_01>
            <WSTO_EE>1</WSTO_EE>
            <IED>1</IED>
            <TP>1</TP>
            <TT_WNT>1</TT_WNT>
            <TT_D>1</TT_D>
            <MR_T>1</MR_T>
            <MR_UZ>1</MR_UZ>
            <I_42>1</I_42>
            <I_63>1</I_63>
            <B_SPV>1</B_SPV>
            <B_SPV_DOSTAWA>1</B_SPV_DOSTAWA>
            <B_MPV_PROWIZJA>1</B_MPV_PROWIZJA>
            <KorektaPodstawyOpodt>1</KorektaPodstawyOpodt>
            <TerminPlatnosci>2016-01-01</TerminPlatnosci>
            <K_10>0</K_10>
            <SprzedazVAT_Marza>0</SprzedazVAT_Marza>
        </SprzedazWiersz>
        <SprzedazCtrl>
            <LiczbaWierszySprzedazy>0</LiczbaWierszySprzedazy>
            <PodatekNalezny>0</PodatekNalezny>
        </SprzedazCtrl>
    </Ewidencja>
</JPK>

and this is the desired csv output
1

[row1]LpSprzedazy;KodKrajuNadaniaTIN;NrKontrahenta;NazwaKontrahenta;DowodSprzedazy;DataWystawienia;DataSprzedazy;TypDokumentu;GTU_01;WSTO_EE;IED;TP;TT_WNT;TT_D;MR_T;MR_UZ;I_42;I_63;B_SPV;B_SPV_DOSTAWA;B_MPV_PROWIZJA;KorektaPodstawyOpodt;TerminPlatnosci;K_10;SprzedazVAT_Marza
[row2]1;BB;a;a;a;1.01.2006;1.01.2006;WEW;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1.01.2016;0;0
[row3]2;CC;b;b;b;1.01.2006;1.01.2006;WEW;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1.01.2016;0;0
[row4]3;DD;c;c;c;1.01.2006;1.01.2006;WEW;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1.01.2016;0;0
[row5]4;EE;d;d;d;1.01.2006;1.01.2006;WEW;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1.01.2016;0;0

And this is what I'm getting:

[row1]KodFormularza;JPK_VAT
[row2]WariantFormularza;2
[row3]DataWytworzeniaJPK;2022-01-01T00:00:00Z
[row4]NazwaSystemu;a
[row5]CelZlozenia;2
[row6]KodUrzedu;1430
[row7]Rok;2022
[row8]Miesiac;1
[row9]Email;"!@"""
[row10]Telefon;a
[row11]LpSprzedazy;2
[row12]KodKrajuNadaniaTIN;CC
[row13]NrKontrahenta;b
[row14]NazwaKontrahenta;b
[row15]DowodSprzedazy;b
[row16]DataWystawienia;2006-01-01
[row17]DataSprzedazy;2006-01-01
[row18]TypDokumentu;WEW
[row19]GTU_01;1
[row20]WSTO_EE;1
[row21]IED;1
[row22]TP;1
[row23]TT_WNT;1
[row24]TT_D;1
[row25]MR_T;1
[row26]MR_UZ;1
[row27]I_42;1
[row28]I_63;1
[row29]B_SPV;1
[row30]B_SPV_DOSTAWA;1
[row31]B_MPV_PROWIZJA;1
[row32]KorektaPodstawyOpodt;1
[row33]TerminPlatnosci;2016-01-01
[row34]K_10;0
[row35]SprzedazVAT_Marza;0
[row36]LpSprzedazy;3
[row37]KodKrajuNadaniaTIN;DD
[row38]NrKontrahenta;c
[row39]NazwaKontrahenta;c
[row40]DowodSprzedazy;c
[row41]DataWystawienia;2006-01-01
[row42]DataSprzedazy;2006-01-01
[row43]TypDokumentu;WEW
[row44]GTU_01;1
[row45]WSTO_EE;1
[row46]IED;1
[row47]TP;1
[row48]TT_WNT;1
[row49]TT_D;1
[row50]MR_T;1
[row51]MR_UZ;1
[row52]I_42;1
[row53]I_63;1
[row54]B_SPV;1
[row55]B_SPV_DOSTAWA;1
[row56]B_MPV_PROWIZJA;1
[row57]KorektaPodstawyOpodt;1
[row58]TerminPlatnosci;2016-01-01
[row59]K_10;0
[row60]SprzedazVAT_Marza;0
[row61]LpSprzedazy;4
[row62]KodKrajuNadaniaTIN;EE
[row63]NrKontrahenta;d
[row64]NazwaKontrahenta;d
[row65]DowodSprzedazy;d
[row66]DataWystawienia;2006-01-01
[row67]DataSprzedazy;2006-01-01
[row68]TypDokumentu;WEW
[row69]GTU_01;1
[row70]WSTO_EE;1
[row71]IED;1
[row72]TP;1
[row73]TT_WNT;1
[row74]TT_D;1
[row75]MR_T;1
[row76]MR_UZ;1
[row77]I_42;1
[row78]I_63;1
[row79]B_SPV;1
[row80]B_SPV_DOSTAWA;1
[row81]B_MPV_PROWIZJA;1
[row82]KorektaPodstawyOpodt;1
[row83]TerminPlatnosci;2016-01-01
[row84]K_10;0
[row85]SprzedazVAT_Marza;0
[row86]LiczbaWierszySprzedazy;0
[row87]PodatekNalezny;0

CodePudding user response:

Since you're dealing with xml, you should be better off using xpath instead. So I would modify your Csv() function to something along these lines:

$targets = $xml_content->xpath('//SprzedazWiersz');
$headers = $targets[0]->xpath('.//*');
$hdrs = array();

foreach ($headers as $header) {
    array_push($hdrs, $header->getName());
}

fputcsv($a, $hdrs);

foreach ($targets as $target){
    $row = $target->xpath('.//*/text()');
    fputcsv($a, $row);
    
}

And it should get you the expected output.

  • Related