Fleurys
asked on
Trying to merge three xml files with Javascript successful in IE but having problems with Firefox
Hi,
I’m trying to merge three xml files in memory. I’ve been successful with IE but the Firefox routine is being problematic. My intention is to merge the ‘B & C’ files into the ‘A’ file. All seems to work well until I get to the second ‘iterateNext’ statement, at which point I receive the following error from Firefox: “An attempt was made to use an object that is not, or is no longer, usable code: 11”.
A snippet is as follows:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Portfolio Management 2.0 --</title>
<script>
var A_doc;
var B_doc;
var C_doc;
var A_file;
var B_file;
var C_file;
var A_svar;
var B_svar;
var C_svar;
var XML = new Object;
A_file = "A.xml"
B_file = "B.xml"
C_file = "C.xml"
function loadXMLDoc(fname)
{
var xmlDoc;
// code for IE
if (window.ActiveXObject) {
//xmlDoc=new ActiveXObject("Microsoft.X MLDOM");
xmlDoc=new ActiveXObject("Msxml2.DOMD ocument");
}
// code for Mozilla, Firefox, Opera, etc.
else
if (document.implementation && document.implementation.cr eateDocume nt) {
xmlDoc=document.implementa tion.creat eDocument( "","",null );
}
else {
alert('Your browser cannot handle this script');
}
xmlDoc.async=false;
xmlDoc.load(fname);
return(xmlDoc);
}
function mergeFiles()
{
A_doc = loadXMLDoc(A_file);
B_doc = loadXMLDoc(B_file);
C_doc = loadXMLDoc(C_file);
// code for IE
if (window.ActiveXObject) {
A_doc.sBroperty("Selection Language", "XPath");
B_doc.sBroperty("Selection Language", "XPath");
C_doc.sBroperty("Selection Language", "XPath");
var sysnodes = A_doc.selectNodes("data/sy stems/syst em");
if (sysnodes.length > 0)
{
// Spin through the System Nodes
for (i=0; i<sysnodes.length; i++){
A_svar = sysnodes[i].getElementsByT agName("s_ var")[0].c hildNodes[ 0].nodeVal ue;
// Add in the associated B Nodes
var Bnodes = B_doc.selectNodes("data/sy stems/syst em[s_var=" + A_svar +"]/mlstns");
if (Bnodes.length > 0 ){
var x1 = sysnodes[i];
x1.appendChild(Bnodes[0]); }
var Cnodes = C_doc.selectNodes("data/sy stems/syst em[s_var=" + A_svar + "]/budg");
if (Cnodes.length > 0 ){
var x2 = sysnodes[i];
x2.appendChild(Cnodes[0]); }
var Cnodes = C_doc.selectNodes("data/sy stems/syst em[s_var=" + A_svar + "]/actl");
if (Cnodes.length > 0 ){
var x3 = sysnodes[i];
x3.appendChild(Cnodes[0]); }
var Cnodes = C_doc.selectNodes("data/sy stems/syst em[s_var=" + A_svar + "]/bes");
if (Cnodes.length > 0 ){
var x4 = sysnodes[i];
x4.appendChild(Cnodes[0]); }
}
}
}
// code for Mozilla, Firefox, Opera, etc.
else
if (document.implementation && document.implementation.cr eateDocume nt) {
var sysNodes = A_doc.evaluate("data/syste ms/system" ,A_doc,nul l, XPathResult.ANY_TYPE,null) ;
var system=sysNodes.iterateNex t();
while (system)
{
A_svar = system.getElementsByTagNam e("s_var") [0].childN odes[0].no deValue;
// Add in the associated B Nodes
var Bnodes = B_doc.evaluate("data/syste ms/system[ s_var=" + A_svar +"]/mlstns",B_doc,null, XPathResult.ANY_TYPE,null) ;
B = Bnodes.iterateNext();
if (B){
system.appendChild(B);}
var Cnodes = C_doc.evaluate("data/syste ms/system[ s_var=" + A_svar + "]/budg",C_doc,null, XPathResult.ANY_TYPE,null) ;
var C2 = Cnodes.iterateNext();
if (C2){
system.appendChild(C2);}
var Cnodes = C_doc.evaluate("data/syste ms/system[ s_var=" + A_svar + "]/actl",C_doc,null, XPathResult.ANY_TYPE,null) ;
var C3 = Cnodes.iterateNext();
if (C3){
system.appendChild(C3);}
var Cnodes = C_doc.evaluate("data/syste ms/system[ s_var=" + A_svar + "]/bes",C_doc,null, XPathResult.ANY_TYPE,null) ;
var C4 = Cnodes.iterateNext();
if (C4){
system.appendChild(C4);}
system=sysNodes.iterateNex t(); ******* Firefox gives me a Code 11 Error on this line *****
}
}
}
</script>
</head>
<body onLoad="mergeFiles()">
<center>
<div id="xslt_as_html"></div>
</center>
<br />
</body>
</html>
I’m trying to merge three xml files in memory. I’ve been successful with IE but the Firefox routine is being problematic. My intention is to merge the ‘B & C’ files into the ‘A’ file. All seems to work well until I get to the second ‘iterateNext’ statement, at which point I receive the following error from Firefox: “An attempt was made to use an object that is not, or is no longer, usable code: 11”.
A snippet is as follows:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Portfolio Management 2.0 --</title>
<script>
var A_doc;
var B_doc;
var C_doc;
var A_file;
var B_file;
var C_file;
var A_svar;
var B_svar;
var C_svar;
var XML = new Object;
A_file = "A.xml"
B_file = "B.xml"
C_file = "C.xml"
function loadXMLDoc(fname)
{
var xmlDoc;
// code for IE
if (window.ActiveXObject) {
//xmlDoc=new ActiveXObject("Microsoft.X
xmlDoc=new ActiveXObject("Msxml2.DOMD
}
// code for Mozilla, Firefox, Opera, etc.
else
if (document.implementation && document.implementation.cr
xmlDoc=document.implementa
}
else {
alert('Your browser cannot handle this script');
}
xmlDoc.async=false;
xmlDoc.load(fname);
return(xmlDoc);
}
function mergeFiles()
{
A_doc = loadXMLDoc(A_file);
B_doc = loadXMLDoc(B_file);
C_doc = loadXMLDoc(C_file);
// code for IE
if (window.ActiveXObject) {
A_doc.sBroperty("Selection
B_doc.sBroperty("Selection
C_doc.sBroperty("Selection
var sysnodes = A_doc.selectNodes("data/sy
if (sysnodes.length > 0)
{
// Spin through the System Nodes
for (i=0; i<sysnodes.length; i++){
A_svar = sysnodes[i].getElementsByT
// Add in the associated B Nodes
var Bnodes = B_doc.selectNodes("data/sy
if (Bnodes.length > 0 ){
var x1 = sysnodes[i];
x1.appendChild(Bnodes[0]);
var Cnodes = C_doc.selectNodes("data/sy
if (Cnodes.length > 0 ){
var x2 = sysnodes[i];
x2.appendChild(Cnodes[0]);
var Cnodes = C_doc.selectNodes("data/sy
if (Cnodes.length > 0 ){
var x3 = sysnodes[i];
x3.appendChild(Cnodes[0]);
var Cnodes = C_doc.selectNodes("data/sy
if (Cnodes.length > 0 ){
var x4 = sysnodes[i];
x4.appendChild(Cnodes[0]);
}
}
}
// code for Mozilla, Firefox, Opera, etc.
else
if (document.implementation && document.implementation.cr
var sysNodes = A_doc.evaluate("data/syste
var system=sysNodes.iterateNex
while (system)
{
A_svar = system.getElementsByTagNam
// Add in the associated B Nodes
var Bnodes = B_doc.evaluate("data/syste
B = Bnodes.iterateNext();
if (B){
system.appendChild(B);}
var Cnodes = C_doc.evaluate("data/syste
var C2 = Cnodes.iterateNext();
if (C2){
system.appendChild(C2);}
var Cnodes = C_doc.evaluate("data/syste
var C3 = Cnodes.iterateNext();
if (C3){
system.appendChild(C3);}
var Cnodes = C_doc.evaluate("data/syste
var C4 = Cnodes.iterateNext();
if (C4){
system.appendChild(C4);}
system=sysNodes.iterateNex
}
}
}
</script>
</head>
<body onLoad="mergeFiles()">
<center>
<div id="xslt_as_html"></div>
</center>
<br />
</body>
</html>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.