Erstellen eines mehrdimensionalen Objekts für den XML-Export
Ich importiere eine CSV-Datei, die viele Rechnungsdaten enthält. Diese Daten müssen basierend auf der Lieferanten-ID gruppiert werden, um eine Überschrift für jeden Lieferanten mit einer Summe aller Rechnungen für diese Lieferanten-ID anzuzeigen. und dann auch jede einzelne Rechnung darunter anzeigen. Ziel dieses Projekts ist es, die CSV-Datei zu importieren, die Daten dem Benutzer anzuzeigen, das Ändern bestimmter Werte über Auswahlfelder zuzulassen und dann per Knopfdruck nach XML zu exportieren. Das XML ist ähnlich strukturiert wie das HTML, bei dem für jede Rechnungsgruppe zuerst bestimmte gemeinsame Daten angezeigt werden und dann die Remittence-Daten unten aufgeführt sind. Um dies zu erreichen, versuche ich, das Objekt so zu strukturieren, dass ich es auf diese Weise ordnungsgemäß in XML konvertieren kannhttp://goessner.net/download/prj/jsonxml/ .
Problem: Die zweiten beiden Zahlungen müssen gruppiert werden, und ich möchte, dass für jede Zeile detaillierter Daten ein Array erstellt und dann dem Hauptobjekt im PmtDetail-Attribut hinzugefügt wird. Im Moment wirbt dieser Code nur für die erste Zeile und ignoriert den Rest.
CSV-Snippet (ich beziehe hier nicht alle Zeilen ein, die im Code verwendet werden)
ID CardCode payment_sum amount
1610165 BENV5271 100 100
1609026 BENV5635 509.85 287.33
1609025 BENV5635 509.85 222.52
JSON
[{"DocNum":"1610165","CardCode":"BENV5271","InvPayAmnt":"100.00","PmntDate":"2012-03-29","payment_sum":"100.00"},
{"DocNum":"1609026","CardCode":"BENV5635","InvPayAmnt":"287.33","PmntDate":"2012-03-29","payment_sum":"509.85"},
{"DocNum":"1609025","CardCode":"BENV5635","InvPayAmnt":"222.52","PmntDate":"2012-03-29","payment_sum":"509.85"}]
JQuery
$(document).ready(function() {
$.getJSON('CSV.php', function(data) {
var prevCardCode = '';
var newDiv; var NewDiv2;
var PaymentFormat;
$.each(data, function(index, element) { //looping once to display header info such as sum
XMLObject = []; // Creating a new object for each row
if (element['CardCode'] != prevCardCode) {
XMLObject.Vendor_Sum = element['payment_sum'];
XMLObject.Name1 = element['CardName'];
XMLObject.Addr1 = element['Address'];
console.log(XMLObject);
newDiv = $('<div/>').addClass('row').appendTo('#showdata');
$('<div class="sum_field">' + 'Total: ' + element['payment_sum'] + '</div>').appendTo(newDiv);
$('<div class="options">Payment Format: <select name="Payment_Format" id="Payment_Format"><option value="CTX" selected="selected">Company to Company</option><option value="PPD">Company to Person</option></select> </div><div id="Selected_Format"></div>').appendTo(newDiv);
XMLObject.paymentFormat = $('select#Payment_Format').val();;
$('select#Payment_Format').change(function(){
PaymentFormat = $(this).val();
XMLObject.paymentFormat = PaymentFormat;
});
}
newDiv2 = $('<div/>').addClass('sub_row').appendTo(newDiv);
prevCardCode = element['CardCode'];
$.each(element, function(key, value) { looping 2nd time to display the detail info
XMLObjectDetail = {}; // Creating an array for each row of detail info
XMLObjectDetail['TotalCurAmount'] = element['InvPayAmnt'];
XMLObjectDetail['NetCurAmount'] = element['InvPayAmnt'];
$('<div class="field">' + value + '</div>').appendTo(newDiv2);
XMLObject.PmtDetail = XMLObjectDetail;
});
});
});
});
PHP
<?php
if (($handle = fopen('upload/BEN-new.csv', "r")) === FALSE) {
die('Error opening file');
}
$headers = fgetcsv($handle, 1024, ',');
$complete = array();
while ($row = fgetcsv($handle, 1024, ",")) {
$complete[] = array_combine($headers, $row);
}
fclose($handle);
echo json_encode($complete);
?>