Click to See Complete Forum and Search --> : Parsing XML into an unordered list


Btx1980
07-15-2008, 12:03 PM
Hello everyone,

First off, I'm relatively new to JavaScript and I'm trying to parse a pretty sizeable, dynamically-generated XML file into a 4-tiered outline and I'm getting a bit stuck...

My XML file looks like this:


<viewentry position="1" noteid="80002068" children="3" descendants="484" siblings="7">
<entrydata columnnumber="0" name="$10" category="true">
<text>Business Analysis</text>
</entrydata>
</viewentry>
<viewentry position="1.1" noteid="8000206C" children="13" descendants="282" siblings="3">
<entrydata columnnumber="1" name="C3" category="true">
<text>Company</text>
</entrydata>
</viewentry>


...and this is what I have for the JavaScript so far....

var xmlDoc;

function parseXML(){
try{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
}
catch(e){
try {
xmlDoc = document.implementation.createDocument("","",null);
}
catch(e){
alert(e.message);
return;
}
}
catch(err){
alert("Your browser can't handle this script!"){
}
xmlDoc.async = false;

xmlDoc.load("http://www.cognivation.com/cogDV.nsf/CalculatedQList?readviewentries&Count=10000");

xmlDoc.onload = writeOutline();
}

function writeOutline(){
if(window.ActiveXObject){
var listItems = xmlDoc.getElementsByTagName('entrydata');
var categoryId = listItems.getAttribute('columnnumber');
var htmlCode = '<li>';

if(categoryId == '0'){
var catNum = 1;
var contents = xmlDoc.getAttribute('text');
htmlCode += '<ul>' + '<br>' + '<li>' + contents; //make certain that this remains open
for (i=0; i<catNum.listItems.length; i++);
htmlCode += '<li>' + contents[i];
}

if(categoryId == '1'){
var catNum = 2;
var contents = xmlDoc.getAttribute('text');
htmlCode += '<ul>' + '<br>' + '<li>' + contents;
for (i=0; i<catNum.listItems.length; i++);
htmlCode += '<li>' + contents[i];
}

if(categoryId == '2'){
var catNum = 3;
var contents = xmlDoc.getAttribute('text');
htmlCode += '<ul>' + '<br>' + '<li>' + contents;
for (i=0; i<catNum.listItems.length; i++);
htmlCode += '<li>' + contents[i];
}

if(categoryId == '3'){
var catNum = 4;
var contents = xmlDoc.getAttribute('text');
htmlCode += '<ul>' + '<br>' + '<li>' + contents;
for (i=0; i<catNum.listItems.length; i++);
htmlCode += '<li>' + contents[i];
}
}
document.getElementById('updatePage').appendChild(ul);

}else if(document.implementation && document.implemtation.createDocument){
var listItems = xmlDoc.getElementsByTagName('entrydata');
var categoryId = listItems.getAttribute('columnnumber');
var contents = xmlDoc.getAttribute('text')
var ul = document.createElement('ul');

if(categoryId == '0'){
var catNum = 1;
var li = document.createElement('li');
appendNode(ul);
for(i=0; i<catNum.listItems.length; i++){
li.appendChild(contents[i])\n;
}

if(categoryId == '1'){
var catNum = 2;
var li = document.createElement('li');
var contents = document.createTextNode();
for(i=0; i<catNum.listItems.length; i++){
li.appendChild(contents[i])\n;
}

if(categoryId == '2'){
var catNum = 3;
var li = document.createElement('li');
var contents = document.createTextNode();
for(i=0; i<catNum.listItems.length; i++){
li.appendChild(contents[i])\n;
}

if(categoryId == '3'){
var catNum = 4;
var li = document.createElement('li');
var contents = document.createTextNode();
for(i=0; i<catNum.listItems.length; i++){
li.appendChild(contents[i])\n;
}
document.getElementById('updatePage').appendChild(ul);
}


I'm trying to generate the outline with the onload event handler:

<body onload="parseXML.js" target="updatePage">

...and so far I'm generating a parseXML() is undefined.

Btx1980
07-15-2008, 02:12 PM
just to correct the above post the HTML code was:

<body onload="parseXML()" target="updatePage">


...not parseXML.js.:o