2014-09-15 2 views
0

그래서 zXml 라이브러리를 사용하여 XML 사용 및 서버 검색과 관련하여 브라우저 간의 차이점을 정리하고 싶습니다.zXml 사용 문제

다음 코드를 제 위치에두고 있으며 오류가 발생했습니다. 미리 감사드립니다!

if(navigator.appName == "Microsoft Internet Explorer") { 
     // This snippet works perfectly fine with ActiveXObject. :) 
} else //Other browsers { 
    var zxmldom = zXmlDom.createDocument(); 
    zxmldom.async = false; 

    zxmldom.load("devices.xml"); 
    alert(zxmldom.documentElement.text); //testing whether XML is getting retrieved properly   
} 

답변

1

zxml.js 문제를 해결하기 위해 몇 가지 변경 사항을 수행했습니다. 희망이 도움이 될 것입니다.

var zXml = { 
 
    useActiveX: (window.ActiveXObject || "ActiveXObject" in window), 
 
    useDom: document.implementation && document.implementation.createDocument && !(window.ActiveXObject || "ActiveXObject" in window), 
 
    useXmlHttp: (typeof XMLHttpRequest != "undefined") && !(window.ActiveXObject || "ActiveXObject" in window) 
 
}; 
 

 
zXml.ARR_XMLHTTP_VERS = ["MSXML2.XmlHttp.6.0", "MSXML2.XmlHttp.3.0"]; 
 
zXml.ARR_DOM_VERS = ["MSXML2.DOMDocument.6.0", "MSXML2.DOMDocument.3.0", "Microsoft.XMLDOM"]; 
 

 
function zXmlHttp() { } 
 

 
zXmlHttp.createRequest = function() { 
 
    if (zXml.useXmlHttp) { 
 
     return new XMLHttpRequest(); 
 
    } else if (zXml.useActiveX) { 
 
     if (!zXml.XMLHTTP_VER) { 
 
      for (var i = 0; i < zXml.ARR_XMLHTTP_VERS.length; i++) { 
 
       try { 
 
        new ActiveXObject(zXml.ARR_XMLHTTP_VERS[i]); 
 
        zXml.XMLHTTP_VER = zXml.ARR_XMLHTTP_VERS[i]; 
 
        break; 
 
       } catch (oError) { ; } 
 
      } 
 
     } 
 

 
     if (zXml.XMLHTTP_VER) { 
 
      return new ActiveXObject(zXml.XMLHTTP_VER); 
 
     } else { 
 
      throw new Error("Could not create XML HTTP Request."); 
 
     } 
 
    } else { 
 
     throw new Error("Your browser doesn't support an XML HTTP Request."); 
 
    } 
 
}; 
 

 
zXmlHttp.isSupported = function() { 
 
    return zXml.useXmlHttp || zXml.useActiveX; 
 
}; 
 

 
function zXmlDom() { } 
 
zXmlDom.createDocument = function() { 
 
    if (zXml.useDom) { 
 
     var oXmlDom = document.implementation.createDocument("", "", null); 
 
     oXmlDom.parseError = { 
 
      valueOf: function() { 
 
       return this.errorCode; 
 
      }, 
 
      toString: function() { 
 
       return this.errorCode.toString() 
 
      } 
 
     }; 
 
     oXmlDom.__initError__(); 
 
     oXmlDom.addEventListener("load", function() { 
 
      this.__checkForErrors__(); 
 
      this.__changeReadyState__(4); 
 
     }, false); 
 
     return oXmlDom; 
 
    } else if (zXml.useActiveX) { 
 
     if (!zXml.DOM_VER) { 
 
      for (var i = 0; i < zXml.ARR_DOM_VERS.length; i++) { 
 
       try { 
 
        new ActiveXObject(zXml.ARR_DOM_VERS[i]); 
 
        zXml.DOM_VER = zXml.ARR_DOM_VERS[i]; 
 
        break; 
 
       } catch (oError) { ; } 
 
      } 
 
     } 
 
     if (zXml.DOM_VER) { 
 
      return new ActiveXObject(zXml.DOM_VER); 
 
     } else { 
 
      throw new Error("Could not create XML DOM document."); 
 
     } 
 
    } else { 
 
     throw new Error("Your browser doesn't support an XML DOM document."); 
 
    } 
 
}; 
 

 
zXmlDom.isSupported = function() { 
 
    return zXml.useDom || zXml.useActiveX; 
 
}; 
 

 
var oMozDocument = null; 
 
if (typeof XMLDocument != "undefined") { 
 
    oMozDocument = XMLDocument; 
 
} else if (typeof Document != "undefined") { 
 
    oMozDocument = Document; 
 
} 
 
if (oMozDocument && !window.opera && !!document.evaluate) { 
 
    oMozDocument.prototype.readyState = 0; 
 
    try { 
 
     oMozDocument.prototype.onreadystatechange = null; 
 
    } catch (oError) { ; } 
 
    oMozDocument.prototype.__changeReadyState__ = function (iReadyState) { 
 
     this.readyState = iReadyState; 
 
     if (typeof this.onreadystatechange == "function") { 
 
      this.onreadystatechange(); 
 
     } 
 
    }; 
 
    oMozDocument.prototype.__initError__ = function() { 
 
     this.parseError.errorCode = 0; 
 
     this.parseError.filepos = -1; 
 
     this.parseError.line = -1; 
 
     this.parseError.linepos = -1; 
 
     this.parseError.reason = null; 
 
     this.parseError.srcText = null; 
 
     this.parseError.url = null; 
 
    }; 
 
    oMozDocument.prototype.__checkForErrors__ = function() { 
 
     if (this.documentElement.tagName == "parsererror") { 
 
      var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number(\d+),Column(\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/; 
 
      reError.test(this.xml); 
 
      this.parseError.errorCode = -999999; 
 
      this.parseError.reason = RegExp.$1; 
 
      this.parseError.url = RegExp.$2; 
 
      this.parseError.line = parseInt(RegExp.$3); 
 
      this.parseError.linepos = parseInt(RegExp.$4); 
 
      this.parseError.srcText = RegExp.$5; 
 
     } 
 
    }; 
 
    oMozDocument.prototype.loadXML = function (sXml) { 
 
     this.__initError__(); 
 
     this.__changeReadyState__(1); 
 
     var oParser = new DOMParser(); 
 
     var oXmlDom = oParser.parseFromString(sXml, "text/xml"); 
 
     while (this.firstChild) { 
 
      this.removeChild(this.firstChild); 
 
     } 
 
     for (var i = 0; i < oXmlDom.childNodes.length; i++) { 
 
      var oNewNode = this.importNode(oXmlDom.childNodes[i], true); 
 
      this.appendChild(oNewNode); 
 
     } 
 
     this.__checkForErrors__(); 
 
     this.__changeReadyState__(4); 
 
    }; 
 
    oMozDocument.prototype.__load__ = oMozDocument.prototype.load; 
 
    oMozDocument.prototype.load = function (sURL) { 
 
     this.__initError__(); 
 
     this.__changeReadyState__(1); 
 
     this.__load__(sURL); 
 
    }; 
 
    
 
    Node.prototype.selectNodes = function (sXPath) { return zXPath.selectNodes(this, sXPath, null); }; 
 
    Node.prototype.selectSingleNode = function (sXPath) { return zXPath.selectSingleNode(this, sXPath, null); }; 
 

 
    Object.defineProperty(Node.prototype, "xml", { 
 
     get: function() { 
 
      var oSerializer = new XMLSerializer(); 
 
      return oSerializer.serializeToString(this, "text/xml"); 
 
     } 
 
    }); 
 
    Object.defineProperty(Node.prototype, "text", { 
 
     set: function (val) { 
 
      this.textContent = val; 
 
     }, 
 

 
     get: function() { 
 
      var sText = ""; 
 
      for (var i = 0; i < this.childNodes.length; i++) { 
 
       if (this.childNodes[i].hasChildNodes()) { 
 
        sText += this.childNodes[i].text; 
 
       } else { 
 
        sText += this.childNodes[i].nodeValue; 
 
       } 
 
      } 
 
      return sText; 
 
     } 
 
    }); 
 
} 
 

 
function zXslt() { } 
 
zXslt.transformToText = function (oXml, oXslt) { 
 
    if (typeof XSLTProcessor != "undefined") { 
 
     var oProcessor = new XSLTProcessor(); 
 
     oProcessor.importStylesheet(oXslt); 
 
     var oResultDom = oProcessor.transformToDocument(oXml); 
 
     var sResult = oResultDom.xml; 
 
     if (sResult.indexOf("<transformiix:result") > -1) { 
 
      sResult = sResult.substring(sResult.indexOf(">") + 1, sResult.lastIndexOf("<")); 
 
     } 
 
     return sResult; 
 
    } else if (zXml.useActiveX) { 
 
     return oXml.transformNode(oXslt); 
 
    } else { 
 
     throw new Error("No XSLT engine found."); 
 
    } 
 
}; 
 

 
function zXPath() { } 
 
zXPath.selectNodes = function (oRefNode, sXPath, oXmlNs) { 
 
    if (typeof XPathEvaluator != "undefined") { 
 
     oXmlNs = oXmlNs || {}; 
 
     var nsResolver = function (sPrefix) { 
 
      return oXmlNs[sPrefix]; 
 
     }; 
 
     var oEvaluator = new XPathEvaluator(); 
 
     var oResult = oEvaluator.evaluate(sXPath, oRefNode, nsResolver, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); 
 
     var aNodes = new Array; 
 
     if (oResult != null) { 
 
      var oElement = oResult.iterateNext(); while (oElement) { 
 
       aNodes.push(oElement); oElement = oResult.iterateNext(); 
 
      } 
 
     } return aNodes; 
 
    } else if (zXml.useActiveX) { 
 
     if (oXmlNs) { 
 
      var sXmlNs = ""; 
 
      for (var sProp in oXmlNs) { 
 
       sXmlNs += "xmlns:" + sProp + "=\'" + oXmlNs[sProp] + "\' "; 
 
      } 
 
      oRefNode.ownerDocument.setProperty("SelectionNamespaces", sXmlNs); 
 
     }; 
 
     return oRefNode.selectNodes(sXPath); 
 
    } else { 
 
     throw new Error("No XPath engine found."); 
 
    } 
 
}; 
 

 
zXPath.selectSingleNode = function (oRefNode, sXPath, oXmlNs) { 
 
    if (typeof XPathEvaluator != "undefined") { 
 
     ; oXmlNs = oXmlNs || {}; 
 
     var nsResolver = function (sPrefix) { return oXmlNs[sPrefix]; }; 
 
     var oEvaluator = new XPathEvaluator(); 
 
     var oResult = oEvaluator.evaluate(sXPath, oRefNode, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null); 
 
     if (oResult != null) { 
 
      return oResult.singleNodeValue; 
 
     } else { 
 
      return null; 
 
     }; 
 
    } else if (zXml.useActiveX) { 
 
     if (oXmlNs) { 
 
      var sXmlNs = ""; 
 
      for (var sProp in oXmlNs) { 
 
       sXmlNs += "xmlns:\'" + sProp + "=" + oXmlNs[sProp] + "\' "; 
 
      } oRefNode.ownerDocument.setProperty("SelectionNamespaces", sXmlNs); 
 
     }; return oRefNode.selectSingleNode(sXPath); 
 
    } else { 
 
     throw new Error("No XPath engine found."); 
 
    } 
 
}; 
 

 
function zXMLSerializer() { } 
 
zXMLSerializer.prototype.serializeToString = function (oNode) { 
 
    var sXml = ""; 
 
    switch (oNode.nodeType) { 
 
     case 1: sXml = "<" + oNode.tagName; 
 
      for (var i = 0; i < oNode.attributes.length; i++) { 
 
       sXml += " " + oNode.attributes[i].name + "=\"" + oNode.attributes[i].value + "\""; 
 
      } sXml += ">"; for (var i = 0; i < oNode.childNodes.length; i++) { 
 
       sXml += this.serializeToString(oNode.childNodes[i]); 
 
      } 
 
      sXml += "</" + oNode.tagName + ">"; 
 
      break; 
 
     case 3: sXml = oNode.nodeValue; 
 
      break; 
 
     case 4: sXml = "<![CDATA[" + oNode.nodeValue + "]]>"; 
 
      break; 
 
     case 7: sXml = "<?" + oNode.nodevalue + "?>"; 
 
      break; 
 
     case 8: sXml = "<!--" + oNode.nodevalue + "-->"; 
 
      break; 
 
     case 9: for (var i = 0; i < oNode.childNodes.length; i++) { 
 
       sXml += this.serializeToString(oNode.childNodes[i]); 
 
      } break; 
 
    }; 
 
    return sXml; 
 
}; 
 

 

 
var textXml = "<ROOT>Hello World</ROOT>"; 
 
var obj = zXmlDom.createDocument(); 
 
obj.loadXML(textXml); 
 
alert(obj.childNodes[0].text);