0

I want to create an HTML table from XML string using javascript. I've created the table but not sure how to pass the XML strings to the table. i want the table to have four columns with the column header name: (id, phone, email, address).

<h1>Test</h1>
    <script>
      var attrs = ["id", "phone", "email", "address"];
      var xmlString =
'<message>\n' +
'  <senses>\n' +
'    <sense id="GFDT002" phone="2345234" email="[email protected]" address="60 test street" >\n' +
'      <definition><b>test</b> are <a href="http://test.com">test</a>test<a href="test.com">test</a>,test <a href="http://test.com">genus</a> <i><b>Apteryx</b></i> test <b>test</b>.test  <a href="http://test.com">test</a>test <a href="http://test.com">egg</a> test.</definition>\n' +
'    </sense>\n' +

'';
    </script>

  

var parser = new DOMParser();
	var xmlDoc =parser.parseFromString(xmlString, "text/xml")
	var test =xmlDoc.getElementsByTagName("message");
  

//create table
	var myTableDiv = document.getElementById("mytable")
	var table = document.createElement('table');
	var tableBody = document.createElement('tbody');
	table.appendChild(tableBody);

	for (var i=0; i<3; i++){
       var tr = document.createElement('tr');
       tableBody.appendChild(tr);

       for (var j=0; j<4; j++){
           var td = document.createElement('td');
           td.width='75';
           td.appendChild(document.createTextNode("test " + i + "," + j));
           tr.appendChild(td);
       }
    }

2 Answers 2

1

Here I made the table.

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml")
var test = xmlDoc.getElementsByTagName("sense");

//create table
var myTableDiv = document.getElementById("mytable")
var table = document.createElement('table');
var tableBody = document.createElement('tbody');
table.appendChild(tableBody);
var tr = document.createElement('tr');
  tableBody.appendChild(tr);
  attrs.forEach(val => {
  var td = document.createElement('th');
    td.width = '100';
    td.innerHTML = val;
    tr.appendChild(td);
  })

Object.keys(test).forEach(el => {
  var tr = document.createElement('tr');
  tableBody.appendChild(tr);
  attrs.forEach(val => {
    var td = document.createElement('td');
    td.width = '100';
    td.innerHTML = test[el].getAttribute(val);
    tr.appendChild(td);
  });
});

myTableDiv.appendChild(table);
table {
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 100%;
}

td, th {
  border: 1px solid #dddddd;
  text-align: left;
  padding: 8px;
}
<h1>Test</h1>

<div id='mytable'></div>
<script>
  var attrs = ["id", "phone", "email", "address"];
  var xmlString =
    '<message>\n' +
    '  <senses>\n' +
    '    <sense id="GFDT002" phone="2345234" email="[email protected]" address="60 test street" >\n' +
    '      <definition><b>test</b> are <a href="http://test.com">test</a>test<a href="test.com">test</a>,test <a href="http://test.com">genus</a> <i><b>Apteryx</b></i> test <b>test</b>.test  <a href="http://test.com">test</a>test <a href="http://test.com">egg</a> test.</definition>\n' +
    '    </sense>\n' +

    '';
</script>

Sign up to request clarification or add additional context in comments.

Comments

0

Are you expecting this output ?

var parser = new DOMParser();
var xmlString =
  '<message>\n' +
  '   <senses>\n' +
  '    <sense id="GFDT002" phone="2345234" email="[email protected]" address="60 test street" >\n' +
  '      <definition><b>test</b> are <a href="http://test.com">test</a>test<a href="test.com">test</a>,test <a href="http://test.com">genus</a> <i><b>Apteryx</b></i> test <b>test</b>.test  <a href="http://test.com">test</a>test <a href="http://test.com">egg</a> test.</definition>\n' +
  '    </sense>\n' + '';
var attrs = ["id", "phone", "email", "address"];
var xmlDoc = parser.parseFromString(xmlString, "text/xml")
var test = xmlDoc.getElementsByTagName("sense");

//create table
var myTableDiv = document.getElementById("mytable")
var table = document.createElement('table');
var tableBody = document.createElement('tbody');
table.appendChild(tableBody);

// For Adding Header
for (var i = 0; i < test.length; i++) {
  var tr = document.createElement('tr');
  for (var j = 0; j < attrs.length; j++) {
    var td = document.createElement('th');
    td.width = '75';
    var span = document.createElement("span");
    span.innerText = attrs[j];
    td.appendChild(span);    tr.appendChild(td);
  }

  tableBody.appendChild(tr);
}

 // For Adding data
for (var i = 0; i < test.length; i++) {
  var tr = document.createElement('tr');

  for (var j = 0; j < attrs.length; j++) {
    var td = document.createElement('td');
    td.width = '75';
    var span = document.createElement("span");
    span.innerText = test[i].getAttribute(attrs[j]);
    td.appendChild(span);
    tr.appendChild(td);
  }
  tableBody.appendChild(tr);
}
var oResult = document.getElementById("Result");
oResult.appendChild(table);
table {
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 100%;
}

td, th {
  border: 1px solid #dddddd;
  text-align: left;
  padding: 8px;
}
<div id="Result"></div>

2 Comments

i try that but the table doesn't display
@user11766958 - Have you added the div "Result" element in your html ?

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.