XML parsing in Jquery

Here we will parse xml and store it in array. Later we will send this array to a new page and display its values in a table.

Desired Output

click the image to zoom













Download project from here or here


ParseInJquery.jsp

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>XML parse in Jquery</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>
<body>

<script>
function parse(details){
    var items = jQuery(details).find('start');
   
    var key="";
    var values="";
   
    for (var i = 0; i < items.length; i++) {
        var ret = [];
        var tot=[];
        ret[0] = jQuery(items[i]).find('Table_No').text();
        console.log("parse " + ret[0]);
        key +=ret[0]+ " ";
      
        ret[1] = jQuery(items[i]).find('Line_No').text();
        ret[2] = jQuery(items[i]).find('Val_perc').text();
        ret[3] = jQuery(items[i]).find('Upper_lim').text();
        ret[4] = jQuery(items[i]).find('Day_puc').text();
       
        ret[5] = jQuery(items[i]).find('Day_Sales').text();
        ret[6] = jQuery(items[i]).find('Sett_Purch').text();
        ret[7] = jQuery(items[i]).find('round_to').text();
        ret[8] = jQuery(items[i]).find('Table_name').text();
       
        ret[9] = jQuery(items[i]).find('sett_sales').text();
        ret[10] = jQuery(items[i]).find('NORMAL').text();
        ret[11] = jQuery(items[i]).find('Trd_Del').text();
        ret[12] = jQuery(items[i]).find('Lower_lim').text();
       
        ret[13] = jQuery(items[i]).find('def_table').text();
        ret[14] = jQuery(items[i]).find('RoFig').text();
        ret[15] = jQuery(items[i]).find('ErrNum').text();
        ret[16] = jQuery(items[i]).find('NoZero').text();
      
        tot.push(ret);
        console.log("tot=" + tot);
        values +=tot+ "|";
    }
      return {key:key , values:values};
}

// We need to escape special characters like inverted comma(""). So put \ slash before inverted comma(") in xml if xml is hard coded (as shown below xml) . If the xml is dynamic then no need to escape characters

var data="<?xml version=\"1.0\" encoding=\"utf-8\"?> <soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"> <soap:Body> <GetBrokerageDetailsResponse xmlns=\"http://tempuri.org/\"> <GetBrokerageDetailsResult> <xs:schema id=\"NewDataSet\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\"> <xs:element name=\"NewDataSet\" msdata:IsDataSet=\"true\" msdata:UseCurrentLocale=\"true\"> <xs:complexType> <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\"> <xs:element name=\"Table\"> <xs:complexType> <xs:sequence> <xs:element name=\"Table_No\" type=\"xs:int\" minOccurs=\"0\" /> <xs:element name=\"Line_No\" type=\"xs:decimal\" minOccurs=\"0\" /> <xs:element name=\"Val_perc\" type=\"xs:string\" minOccurs=\"0\" /> <xs:element name=\"Upper_lim\" type=\"xs:decimal\" minOccurs=\"0\" /> <xs:element name=\"Day_puc\" type=\"xs:decimal\" minOccurs=\"0\" /> <xs:element name=\"Day_Sales\" type=\"xs:decimal\" minOccurs=\"0\" /> <xs:element name=\"Sett_Purch\" type=\"xs:decimal\" minOccurs=\"0\" /> <xs:element name=\"round_to\" type=\"xs:decimal\" minOccurs=\"0\" /> <xs:element name=\"Table_name\" type=\"xs:string\" minOccurs=\"0\" /> <xs:element name=\"sett_sales\" type=\"xs:decimal\" minOccurs=\"0\" /> <xs:element name=\"NORMAL\" type=\"xs:decimal\" minOccurs=\"0\" /> <xs:element name=\"Trd_Del\" type=\"xs:string\" minOccurs=\"0\" /> <xs:element name=\"Lower_lim\" type=\"xs:decimal\" minOccurs=\"0\" /> <xs:element name=\"def_table\" type=\"xs:unsignedByte\" minOccurs=\"0\" /> <xs:element name=\"RoFig\" type=\"xs:int\" minOccurs=\"0\" /> <xs:element name=\"ErrNum\" type=\"xs:decimal\" minOccurs=\"0\" /> <xs:element name=\"NoZero\" type=\"xs:int\" minOccurs=\"0\" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\"> <NewDataSet xmlns=\"\"> <Table diffgr:id=\"Table1\" msdata:rowOrder=\"0\"> <Table_No>12345</Table_No> <Line_No>1</Line_No> <Val_perc>V</Val_perc> <Upper_lim>100.00</Upper_lim> <Day_puc>1.000000</Day_puc> <Day_Sales>1.000000</Day_Sales> <Sett_Purch>1.000000</Sett_Purch> <round_to>4.00</round_to> <Table_name>T-1V 1P BOTH SODE             </Table_name> <sett_sales>1.000000</sett_sales> <NORMAL>0.000000</NORMAL> <Trd_Del>F</Trd_Del> <Lower_lim>0.00</Lower_lim> <def_table>0</def_table> <RoFig>0</RoFig> <ErrNum>50.0000</ErrNum> <NoZero>1</NoZero> </Table> <Table diffgr:id=\"Table2\" msdata:rowOrder=\"1\"> <Table_No>23456</Table_No> <Line_No>2</Line_No> <Val_perc>P</Val_perc> <Upper_lim>10000000.00</Upper_lim> <Day_puc>1.000000</Day_puc> <Day_Sales>1.000000</Day_Sales> <Sett_Purch>1.000000</Sett_Purch> <round_to>4.00</round_to> <Table_name>T-1V 1P BOTH SODE             </Table_name> <sett_sales>1.000000</sett_sales> <NORMAL>0.000000</NORMAL> <Trd_Del>F</Trd_Del> <Lower_lim>100.00</Lower_lim> <def_table>0</def_table> <RoFig>0</RoFig> <ErrNum>50.0000</ErrNum> <NoZero>1</NoZero> </Table> <Table diffgr:id=\"Table3\" msdata:rowOrder=\"2\"> <Table_No>34567</Table_No> <Line_No>3</Line_No> <Val_perc>V</Val_perc> <Upper_lim>100.00</Upper_lim> <Day_puc>1.000000</Day_puc> <Day_Sales>1.000000</Day_Sales> <Sett_Purch>1.000000</Sett_Purch> <round_to>4.00</round_to> <Table_name>T-1V 1P BOTH SODE             </Table_name> <sett_sales>1.000000</sett_sales> <NORMAL>0.000000</NORMAL> <Trd_Del>S</Trd_Del> <Lower_lim>0.00</Lower_lim> <def_table>0</def_table> <RoFig>0</RoFig> <ErrNum>50.0000</ErrNum> <NoZero>1</NoZero> </Table> <Table diffgr:id=\"Table4\" msdata:rowOrder=\"3\"> <Table_No>456789</Table_No> <Line_No>4</Line_No> <Val_perc>P</Val_perc> <Upper_lim>10000000.00</Upper_lim> <Day_puc>1.000000</Day_puc> <Day_Sales>1.000000</Day_Sales> <Sett_Purch>1.000000</Sett_Purch> <round_to>4.00</round_to> <Table_name>T-1V 1P BOTH SODE             </Table_name> <sett_sales>1.000000</sett_sales> <NORMAL>0.000000</NORMAL> <Trd_Del>S</Trd_Del> <Lower_lim>100.00</Lower_lim> <def_table>0</def_table> <RoFig>0</RoFig> <ErrNum>50.0000</ErrNum> <NoZero>1</NoZero> </Table> </NewDataSet> </diffgr:diffgram> </GetBrokerageDetailsResult> </GetBrokerageDetailsResponse> </soap:Body> </soap:Envelope> "; 

var input = data.match("<diffgr:diffgram xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\">(.*)</diffgr:diffgram>");
var inputxml = input[1];  
alert("inputxml:   "+inputxml); 

// Replacing tags to meet our need using replace function in jquery
inputxml=inputxml.replace(/<Table_No>/g, '<start><Table_No>'); 
inputxml=inputxml.replace(/<\/NoZero>/g, '</NoZero></start>'); // escape special characters by using \ slash

prompt("inputxml",inputxml);
data=inputxml;

function parsedValues()
{
var x=parse(data);

 var key=x.key;
 alert("key: "+x.key);

 var values=x.values;
 var values_words=values.split("|");
 var values_length=values_words.length;
 alert("values: "+x.values+ "\n Total words: "+(values_length-1));

           alert("values_words [1] :   "+values_words[1]);
           return values;
  
}

var output=parsedValues();
alert ("output: "+output);
$.ajax({
    type: "POST",
    url: "DisplayInTable.jsp",
    data: "output=" +output+"&type=data_in_array",
     success: function(response){
       var win = window.open("","","width=800, height=400,resizable=yes");
       win.document.write(response);
     
    }
    });
</script>

<form name="dataform">
<input type="text" id="value">
</form>

</body>
</html>




DisplayInTable.jsp

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Display Array in Table</title>

 <script>
 function getTable_No(Table_No,type)
    {
     if (type=='data_in_array')
        {
  var Table_No_From_td_tag;
 Table_No_From_td_tag= document.getElementById(Table_No).innerHTML;
    opener.document.dataform.value.value =Table_No_From_td_tag;
    window.close();
        }
    }
  </script>
 
 
</head>
<body>

<%
String data1 = request.getParameter("output");
String data2 = request.getParameter("type");

System.out.println("data1: "+data1);
System.out.println("data2: "+data2);

String[] splited_to_row = data1.split("\\|");
int splited_to_row_Length=splited_to_row.length;
//System.out.println("splited_to_row 0:  "+splited_to_row[0]);
//System.out.println("splited_to_row_Length :  "+splited_to_row_Length);

String[] splited_to_column=splited_to_row[0].split(",");  // hardcodes 0 for getting length
int splited_to_column_Length=splited_to_column.length;
       
//System.out.println("splited_to_column_Length: "+splited_to_column_Length);
//System.out.println("splited_to_column 0: "+splited_to_column[0]);


// Note: To display array in proper table structure, first try without using <td> tag as below

//for(int i=0; i < splited_to_row_Length; i++)
//{
//    splited_to_column=splited_to_row[i].split(",");
//    for(int j=0; j < splited_to_column_Length; j++)
//    {
//    System.out.println("splited_to_column for loop ------: "+splited_to_column[j]);
//    }
//}
%>
<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #000000;color:#000000;width:100%" cellpadding="3" cellspacing="3">
<tr>
<th>Table_No</th>
<th>Line_No</th>
<th>Val_perc</th>
<th>Upper_lim</th>
<th>Day_puc</th>
<th>Day_Sales</th>
<th>Sett_Purch</th>
<th>round_to</th>
<th>Table_name</th>
<th>sett_sales</th>
<th>NORMAL</th>
<th>Trd_Del</th>
<th>Lower_lim</th>
<th>Def_table</th>
<th>RoFig</th>
<th>ErrNum</th>
<th>NoZero</th>
</tr>

 <%
 for(int i=0; i < splited_to_row_Length; i++)
{
     %>
     <tr>
     <%
    splited_to_column=splited_to_row[i].split(",");
     %>
     <%-- Since we need text of one full column in blue color we write seperate <td> --%>
     <td style="color: blue;" id='<%=splited_to_column[0]%>' onclick="getTable_No(this.id,'<%=data2 %>')">  <%-- passing this.id(current id) and data2(type) as parameter --%>
       <%=splited_to_column[0]%>
     </td>
     <%
   
    for(int j=0; j < splited_to_column_Length-1; j++)
    {
        %>
        <td>
        <%System.out.println("splited_to_column for loop ------: "+splited_to_column[j]);%>
        <%=splited_to_column[j+1]%>  <%-- j+1 for remaining <td> as 1st <td> is already written above. Also splited_to_column_Length-1 as we have to display one column less--%>
        </td>
       
     <%
     }

    %>
    </tr>
    <%
}
 %>
</table>

</body>
</html>

Desired Output


No comments:

Post a Comment