v2.5.2
Giriş yap

PHP XML while döngüsüyle işlem

nyc
442 defa görüntülendi

Merhaba, şöyle bir xml dosyam var <cbc:Name></cbc:Name> while döngüsüne aldım başarıyla tüm bilgileri aldı yalnız bana alttaki TL KDV bölümüde gerekiyor kolon kolon ayırıp aynı tabloda birleştiricem

PHP KODU bu şekilde

    function ara($bas, $son, $yazi)
{
    @preg_match_all('/' . preg_quote($bas, '/') .
    '(.*?)'. preg_quote($son, '/').'/i', $yazi, $m);
    return @$m[1];
}
if(isset($_FILES['dosya'])){
   $hata = $_FILES['dosya']['error'];
   if($hata != 0) {
      echo 'Yüklenirken bir hata gerçekleşmiş.';
   } else {
      $boyut = $_FILES['dosya']['size'];
      if($boyut > (1024*1024*3)){
         echo 'Dosya 3MB den büyük olamaz.';
      } else {
         
         $isim = $_FILES['dosya']['name'];
         $uzanti = explode('.', $isim);
         $uzanti = $uzanti[count($uzanti)-1];
         
            $dosya = $_FILES['dosya']['tmp_name'];
            copy($dosya, 'dosyalar/' . $_FILES['dosya']['name']);
			
            echo '<br>Dosyanız upload edildi!';
			$dosya = $dosya;
			$icerik = file_get_contents($dosya);
			$unvan = ara('<cbc:Name>', '</cbc:Name>', $icerik);
			$adres = ara('<cbc:StreetName>', '</cbc:StreetName>', $icerik);
			$sirketMahalle = ara('<cbc:CitySubdivisionName>', '</cbc:CitySubdivisionName>', $icerik);
			$sirketSehir = ara('<cbc:CityName>', '</cbc:CityName>', $icerik);
			$faturaNo = ara('<cbc:ID>', '</cbc:ID>', $icerik);
			$vergiDairesi = ara('<cac:TaxScheme><cbc:Name>', '</cbc:Name></cac:TaxScheme>', $icerik);
			$vergiNo = ara('<cbc:ID schemeID="VKN">', '</cbc:ID>', $icerik);
			$faturaAciklama = ara('<cac:Item>', '</cac:Item>', $icerik);
			$urunTutar = ara('<cac:Price>', '</cac:Price>', $icerik);
			$toplamTutar = ara('<cbc:PriceAmount currencyID="TRY">', '</cbc:PriceAmount>', $icerik);

			//echo str_replace('<', '&lt;', $icerik);
			echo 
			'<br><br><br><b>Şirket Ünvanı:</b> ' . $unvan[0]
			.'<br><b>Şirket Adres:</b> ' . $adres[0]
			.'<br><b>Şirket Mahalle:</b> ' . $sirketMahalle[0]
			.'<br><b>Şirket Şehir:</b> ' . $sirketSehir[0]
			.'<br><b>Fatura Numarası: </b>' . $faturaNo[0]
			.'<br><b>Vergi Dairesi: </b>' . $vergiDairesi[0]
			.'<br><b>Vergi Numarası: </b>' . $vergiNo[0]
			.'<br><b>Fatura Açıklaması: </b>' . $faturaAciklama[0]
			.'<br><br><b>Fatura Toplam Tutar: </b>' . $toplamTutar[0]. " TL";
			
			foreach ($faturaAciklama as $ftraciklama){
				echo "<br>".$ftraciklama."<br>";
				
				
				
			}
			
					
				  }
			   }
			}

foreach ($faturaAciklama as $ftraciklama){
echo "<br>".$ftraciklama."<br>";

kdv bölümünü ve sayıları örnek "ürün açıklaması, fiyat, kdv" şeklinde yan yana sıralamak için ne yapabilirim

trsherlock
865 gün önce

Aşağıdaki kodları bir php sayfasına yapıştır.
$xmlDom->loadXML(file_get_contents("xmlFile.xml")); Dosyayı sistemine kaydettirdiğin için
Xml dosyasının konumunu da atayabilir veya hazır xml dosyasının adını da yazıp deneyebilirsin...
Sonra kodları analiz edip gerisini kendin çözümlersin.

<table>
    <thead>
        <tr>
            <th>
                Miktar
            </th>
            <th>
                Mal Hizmet Adı
            </th>
            <th>
                Tutar
            </th>
        </tr>
    </thead>
    <tbody>
        <?php

        // XmlGird kullandığında bir değere Show Xpath ile konumunu aldığında '/Invoice/cac:InvoiceLine[1]/cac:Item/cbc:Name'
        // ('//cac:InvoiceLine/cac:Item/cbc:Name')->item($key) yapmalısın aksi durumda değere ulaşamıyorsun.
        $xmlDom = new DOMDocument();
        $xmlDom->preserveWhiteSpace = false;
        $xmlDom->loadXML(file_get_contents("xmlFile.xml"));
        $xpath = new DOMXPath($xmlDom);

        $invoiceLine = @$xpath->query('//cac:InvoiceLine');
        foreach ($invoiceLine as $key => $val) {
            $invoiceLine = [
                "ID" => @$xpath->query("//cac:InvoiceLine/cbc:ID")->item($key)->nodeValue,
                "InvoicedQuantity" => @$xpath->query("//cac:InvoiceLine/cbc:InvoicedQuantity")->item($key)->nodeValue,
                "LineExtensionAmount" => @$xpath->query("//cac:InvoiceLine/cbc:LineExtensionAmount")->item($key)->nodeValue,
                "ItemName" => @$xpath->query("//cac:InvoiceLine/cac:Item/cbc:Name")->item($key)->nodeValue,
                "ItemID" => @$xpath->query("//cac:InvoiceLine/cac:Item/cac:SellersItemIdentification/cbc:ID")->item($key)->nodeValue,
                "Price" => @$xpath->query("//cac:InvoiceLine/cac:Price/cbc:PriceAmount")->item($key)->nodeValue,
            ];
            $tr = "<tr><td>$invoiceLine[LineExtensionAmount]</td><td>$invoiceLine[ItemName]</td><td>$invoiceLine[Price]</td></tr>"


        ?>
         <?= $tr ?>


        <?php
        }
        ?>
    </tbody>
</table>