我必须转换一个xml文件到csv的php,但它必须有一个特定的外观输出

hgncfbus  于 2022-12-06  发布在  PHP
关注(0)|答案(1)|浏览(123)

对不起,如果后是建设差,我是新的,这一切,还在学习。
根据我的理解,第一行必须是标签名称,第二行是它们的值。由于我是一个初学者,所以很难理解如何使用该数组并将其放入一个单元格中的一行。从我的输出来看,前10行也不应该存在,但我不知道如何在创建数组时跳过它们。
下面是我用于生成结果的PHP代码:

<?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);
            }
        }
    }
?>

这是xml文件:

<?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>

并且这是期望的CSV输出
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

这就是我得到的

[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
9o685dep

9o685dep1#

由于您要处理的是xml,因此最好使用xpath。因此,我将把您的Csv()函数修改为如下形式:

$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);
    
}

而且它应该会让你得到预期的输出。

相关问题