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.
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.