0

I am reading data from an XML file then displaying it in a table in Javascript. However, only the first row displays well and the rest of the rows dont as follows:

    results = "<table class= \"table table-condensed table-hover table-bordered table-striped\">";
    results += "<caption>Payment History</caption>";
    results += "<thead>";
    results += "<tr>";
    results += "<th>User</th>";
    results += "<th>Video Name</th>";
    results += "<th>Payment Date</th>";
    results += "<th>Time</th>";
    results += "</tr>";
    results += "</thead>";
    results += "<tbody>";

    for (var index = 0; index < items.length; index++)
    {
        var deviceNumElement = items[index].getElementsByTagName("devicenumber")[0];
        var VideoNumElement = items[index].getElementsByTagName("videonumber")[0];
        var dateElement = items[index].getElementsByTagName("paymentdate")[0];
        var timeElement = items[index].getElementsByTagName("paymenttime")[0];

        if (deviceNumElement && VideoNumElement && dateElement && timeElement)
        {
            deviceNum[index] = deviceNumElement.firstChild.data;
            videoNum[index] = VideoNumElement.firstChild.data;
            paidDate[index] = dateElement.firstChild.data;
            paidTime[index] = timeElement.firstChild.data;

            results += "<tr>";
            results += "<td>"+ deviceNum[index] + "</td>";
            results += "<td>" + videoNum[index] + "</td>";
            results += "<td>" + paidDate[index] + "</td>";
            results += "<td>" + paidTime[index] + "</td>"; 
            results += "</tr>";
        }

        results += " </tbody>";
        results += " </table>";

        alert(results);

        var div = document.getElementById("paymentDetails");
        div.innerHTML = results;

    }

The data gets displayed as follows:

                 Payment History
 User            VideoName         Payment Date    Time
43CA3KZXYQGBK    Animal Series     14-01-2014      14:12:20
43CA3KZXYQGBKAnimalSeries10-01-201415:40:12
43CA3KZXYQGBKAnimalSeries10-01-201403:21:15
43CA3KZXYQGBKAnimalSeries10-01-201416:39:28

The XML Data:

    <xml>
<payments>
   <devicenumber>43CA3KZXYQGBK</devicenumber>
   <videonumber>1234567</videonumber>
   <paymentdate>2014-01-11</paymentdate>
   <paymenttime>19:38:19</paymenttime>
</payments>
<payments>
   <devicenumber>43CA3KZXYQGBK</devicenumber>
   <videonumber>1234567</videonumber>
   <paymentdate>2014-01-10</paymentdate>
   <paymenttime>19:38:19</paymenttime>
</payments>
<payments>
   <devicenumber>43CA3KZXYQGBK</devicenumber>
   <videonumber>1234567</videonumber>
   <paymentdate>2014-01-01</paymentdate>
   <paymenttime>19:38:19</paymenttime>
</payments>
<payments>
   <devicenumber>43CA3KZXYQGBK</devicenumber>
   <videonumber>1234567</videonumber>
   <paymentdate>2014-01-09</paymentdate>
   <paymenttime>19:38:19</paymenttime>
</payments>
</xml>

What could i be doing wrong?

0

1 Answer 1

2

The closing tag for table is in the for-loop. You need to put it outside the for-loop:-

for (var index = 0; index < items.length; index++)
{
    var deviceNumElement = items[index].getElementsByTagName("devicenumber")[0];
    var VideoNumElement = items[index].getElementsByTagName("videonumber")[0];
    var dateElement = items[index].getElementsByTagName("paymentdate")[0];
    var timeElement = items[index].getElementsByTagName("paymenttime")[0];

    if (deviceNumElement && VideoNumElement && dateElement && timeElement)
    {
        deviceNum[index] = deviceNumElement.firstChild.data;
        videoNum[index] = VideoNumElement.firstChild.data;
        paidDate[index] = dateElement.firstChild.data;
        paidTime[index] = timeElement.firstChild.data;

        results += "<tr>";
        results += "<td>"+ deviceNum[index] + "</td>";
        results += "<td>" + videoNum[index] + "</td>";
        results += "<td>" + paidDate[index] + "</td>";
        results += "<td>" + paidTime[index] + "</td>"; 
        results += "</tr>";
    }
}

    results += " </tbody>";
    results += " </table>";

    alert(results);

    var div = document.getElementById("paymentDetails");
    div.innerHTML = results;
Sign up to request clarification or add additional context in comments.

2 Comments

Thank you, cant understand how I took so long to notice that.
In programming world, sometimes shit like this happens to everyone, including me. :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.