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

?>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage