Rajasekhar
Rajasekhar

Reputation: 2455

Converting Table data to the xml structured data

I stuck the below requirement, Here I have to show all the table data to the xml structured data, I tried with the following, I'm getting xml structure but struggling to show row data with table headers like below

<rowset>
<row name='SequnceNumber'>
    <row>Item</row> 
    <row>Weight</row>   
    <row>LableNo</row>
    <row>Unitcost</row>
    <row>Delete</row>
</rowset>
<rowset>
<rowset name='1212121'>
    <Item>test1</Item>
    <Weight>3000</Weight>   
    <LableNo>test1</LableNo>    
    <Unitcost>test1</Unitcost>  
    <Delete>test1</Delete>
</rowset>

I tried with below code,

  $(document).ready(function(){
    $("#idXmlData").click(function(){
        var xmlStart =  "<?xml version=\"1.0\" encoding=\"UTF-8\">";
        var xml = xmlStart;
        $(".mutliple tr").each(function() {
        var cells = $("td", this);
        if (cells.length > 0) {
            xml +="<rowset name='" + cells.eq(0).text() + "'>\n";
            for (var i = 1; i < cells.length; ++i) {
                //var tableHeaders=["SequnceNumber","Item","Weight","LableNo","Unitcost","Delete"];
                //for(var j=0;j<tableHeaders.length;j++){
                    // xml += "\t<"+j+">" + cells.eq(i).text() + "</"+j+">\n";
                    xml += "\t<row>" + cells.eq(i).text() + "</row>\n";
                //}               
            }
            xml += "</rowset>\n";
        }
    });
    window.alert(xml);      
    }); 
  });

JS fiddle

Upvotes: 0

Views: 62

Answers (1)

Patel
Patel

Reputation: 1478

It will be a bit easier if you format your table to include header with th as you can see in the following code, because separating header text from other rows is going to make things a bit simpler.

Here's JS for that :

$("#idXmlData").click(function(){
    var xmlStart =  "<?xml version=\"1.0\" encoding=\"UTF-8\">";
    var xml = xmlStart;
    var xmlFirstRowSet = "<rowset><row name='";
    var thArray = new Array();
    $('th').each( function(index) {
        thArray[index] = $(this).html();
    });
    xmlFirstRowSet = xmlFirstRowSet + thArray[0] + "'>";
    var headerRowSet='';

    for(var i=1; i< thArray.length; i++) {
      headerRowSet =  headerRowSet + "<row>" + thArray[i] + "</row>";
    }

    headerRowSet = headerRowSet + "</rowset>";
    xmlFirstRowSet = xmlFirstRowSet + headerRowSet;
    var bodyRowSet ='';

    $(".mutliple tbody tr").each(function() {
        bodyRowSet = bodyRowSet + "<rowset name='" + $(this).find('td').html() + "'>";
        $(this).find('td:not(:first-child)').each(function() {
           $td = $(this);
           var tdValue = $(this).html();
           var $th = $td.closest('table').find('th').eq($td.index()).html();
           bodyRowSet = bodyRowSet + "<" + $th + ">" + tdValue + "</" + $th + ">";  
        });
        bodyRowSet = bodyRowSet + "</rowset>";
    });

    xml = xmlStart + xmlFirstRowSet + bodyRowSet;
    console.log(xml);
    window.alert(xml);      
});

Here's a working Fiddle

Upvotes: 1

Related Questions