Sen sorgulama sonrası oluşan "tabloyu dışarı aktar > Csv for MS Excel" seçeneği ile mi alıyorsun?
Eğer böyle aktarıyorsan csv dosyasının içine değerler metin olarak "100.4" şeklinde yazılıyor. Metin olarak saklandığı için de metin olarak görünür.
Aslında sistemde verü türü sayı, ondalık olanları otomatik sayı olarak saklayıp indirmesi daha mantıklı olurdu.
Excel ile açtıktan sonra sayısal sütunları seç Ctrl+H ile noktaları virgüle çevir.
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>
Arkadaşım anladığım kadarı ile faturanın xml dosyasını post ediyorsun ve php tarafına yorumlatıyorsun.
Eğer veritabanına kaydetmen ve sunucu tarafında kullanman gerekmiyorsa php kullanmana gerek yok.
Jquery kütüphanesini kullanarak Javascript ile çözebilirsin çünkü ben yapmıştım.
https://tr-sherlock.com/earsivxml adresinden xml dosyalarını tablo haline getirtiyorum. JS Kodlarını inceleyebilirsin.
Sitemdeki uzun zaman önceydi ama aydınlatıcı olur. Yerelde kullandığım Js kullandıkça biraz daha gelişti diyebilirim :)
İlle de php ile yapacağım dersen ben 5000/30000 bin portalından fatura sorgulama ve gelen arşiv dosyasının içindeki xml dosyasının adını değiştirerek indirmek istiyordum.
İki hafta önce araştırmalarım sonucu çözdüm. @munzevi arkadaşımızın dediği gibi new DOMDocument()
ve ek olarak new DOMXPath($xmlDom)
sınıflarını kullanabilirsin.
DOMXPath
ise javascript xpath = div > input
gibi kullanmanı sağlar. DOMXPath
kullanımı ise div/input
//cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID="VKN"]
bir de bunu yazmakla uğraşmaman için
xmlgird.net adresinden Open File kullanarak xml dosyasındaki bilgilere ulaşabilirsin.
$uniqeZip = uniqid() . ".zip"; // Geçici dosya adı oluşturur.
$zipResource = fopen($uniqeZip, "w"); // Dizine geçici dosya oluşturur.
$zip_curl = curl_init($_POST["downUrl"]); // 5000/30000 portalındaki faturaya ait bağlantı alınır.
curl_setopt($zip_curl, CURLOPT_FILE, $zipResource); // Curl calıştırıldığında geçici dosyaya yazılır.
$page = curl_exec($zip_curl);
if (!$page) {
echo "Error :- " . curl_error($ch);
}
curl_close($zip_curl);
$zip = new ZipArchive;
if ($zip->open($uniqeZip) === TRUE) {
$xmlFile = $zip->getFromIndex(1)); // Arşiv dosyasında indexine göre 0.html 1.xml
$fatura = [];
$xmlDom = new DOMDocument();
$xmlDom->preserveWhiteSpace = false;
$xmlDom->loadXML($xmlFile);
$xpath = new DOMXPath($xmlDom);
$fatura["ID"] = $xpath->query('//cbc:ID')->item(0)->nodeValue;
$fatura["saticiVKN"] = @$xpath->query('//cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID="VKN"]')->item(0)->nodeValue;
$fatura["saticiTCKN"] = @$xpath->query('//cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID="TCKN"]')->item(0)->nodeValue;
$fatura["aliciVKN"] = @$xpath->query('//cac:AccountingCustomerParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID="VKN"]')->item(0)->nodeValue;
$fatura["aliciTCKN"] = @$xpath->query('//cac:AccountingCustomerParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID="TCKN"]')->item(0)->nodeValue;
$aliciVKN = $fatura["aliciVKN"] == null ? $fatura["aliciTCKN"] : $fatura["aliciVKN"];
$saticiVKN = $fatura["saticiVKN"] == null ? $fatura["saticiTCKN"] : $fatura["saticiVKN"];
// echo json_encode([
// "xmlName" => "@$saticiVKN@$fatura[ID]@$aliciVKN.xml",
// "xmlString" => $xmlFile
// ]);
$zip->close();
} else {
echo 'failed';
}
unlink($uniqeZip);
#YUKARIDAKİ KODLAR LAZIM OLURSA KULLANIRSI
// 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.
$invoiceLine = @$xpath->query('//cac:InvoiceLine');
forEach($invoiceLine as $key=>$val) {
print_r([
"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,
]);
}
@recepkaramanli61
Öncelikle ilginiz için teşekkür ederim. Şu anda dediğiniz gibi kullanıyorum.
Böyle cevap bulmanız biraz zor. Sistem bağlanamıyorsa bir sebebi vardır ve hata mesajı vermiştir. Onu da paylaşmanızda yarar var.
Türkçe karakter sorunu gidermek için aşağıdaki eski kodun yerine yeni kodu kullanın.
Eski Kod: return a > b ? direction : -1 * direction;
Yeni Kod: return direction ? a.localeCompare(b): -1 * direction;
Sonunda aradığımı buldum Codepen'de paylaşılmış isterseniz inceleyebilirsiniz
JavaScript Multi-Sort Array of Objects
Sen selectbox yerine arama yapılabilen selectbox istiyorsun anladığım kadarı ile.
Bunun için https://select2.org/selections kullanabilirsin.
Ben de kişisel searchbox yapmaya çalışıyordum.
Tayfun kardeşim sağ olsun html-css kısmını onun videosundan bakarak yaptım.
İşlerim nedeni ile yarım bırakmıştım. Renkleri falan değişmesi gerekebilir.
En azından işlevsel olarak fena değil. Aranabilir bulunan değerler arasında hareket edilebilir ve enter ile de seçilen değer kullanılabilir.
Kontrollerimi yaparken farkettim click
eventi eklememişim.
ST VE STL değerleri boş bakış açını değiştirmen lazımdı aslında.
Her 1 dakika sonrasında istek atıp kontrol ediliyor.
Dikkat ettin mi bilmiyorum otomatik atılan istekler boş dönüyor.
Fakat zaman artıyor yani incelemem sonucu bilgisayar saati ile başlama saati arasındaki fark alınarak hesaplanıyor.
[
{
"matchDate": "2022-03-23T16:30:00Z",
"DT": "19:30",
"MD": "2022-03-23T19:30:00+03:00",
"HT": "Finlandiya",
"HTTR": "Finlandiya U19",
"AT": "Belçika",
"ATTR": "Belçika U19",
"L": "U19 Avrupa Şampiyonası Elit Tu"
}
]
Yerel saate göre 19:30'da başlamış maç şu anda 21:01 hesaplarsak 76. dakika oynanıyor.
let data = [
{
"date": "2021-03-23",
"price": 300
},
{
"date": "2021-03-24",
"price": 500
},
{
"date": "2021-03-22",
"price": 10
},
{
"date": "2021-03-21",
"price": 500
},
{
"date": "2021-03-13",
"price": 1500
},
{
"date": "2021-03-03",
"price": 250
},
{
"date": "2021-03-15",
"price": 1000
}
]
let sorting = data.sort((a,b)=> a["date"] > b["date"] ? 1: -1)
// sıralamanın tersi için '>' yerine '<' veya '1' ile '-1' yer değiştirmen yeterli.
console.log(sorting)
Sıralama sonrası çıktı.
[
{ date: '2021-03-03', price: 250 },
{ date: '2021-03-13', price: 1500 },
{ date: '2021-03-15', price: 1000 },
{ date: '2021-03-21', price: 500 },
{ date: '2021-03-22', price: 10 },
{ date: '2021-03-23', price: 300 },
{ date: '2021-03-24', price: 500 }
]