Ciao a tutt*.
Ho creato questo script che spero sia utile a chiunque abbia la necessità di convertire un documento XML in un oggetto JavaScript. Sono partito da uno script già fatto, ma l'ho migliorato parecchio... I due documenti qui postati vanno ovviamente creati nella stessa cartella!
documento da leggere (example.xml):
pagina HTML da cui avviene la lettura:codice:<ALEXA VER="0.9" URL="davidwalsh.name/" HOME="0" AID="="> <SD TITLE="A" FLAGS="" HOST="davidwalsh.name"> <TITLE TEXT="David Walsh Blog :: PHP, MySQL, CSS, Javascript, MooTools, and Everything Else"/> <LINKSIN NUM="1102"/>Hello <SPEED TEXT="1421" PCT="51"/>World! <FAVOURITE /> </SD> <SD> <POPULARITY URL="davidwalsh.name/" TEXT="7131"/> <REACH RANK="5952"/> <RANK DELTA="-1648"/> </SD> </ALEXA>
carlomarxcodice:<html> <head> <title>XML to JavaScript Object conversion example</title> <script type="text/javascript"> // a normal XMLHttpRequest function: it retrieves a file via XMLHTTPRequest, then calls fncCallback when done. function XHR(sURL, fncCallback /*, argumentToPass1, argumentToPass2, etc. */) { var oResp, aArgs = Array.prototype.slice.call(arguments, 2); if (window.XMLHttpRequest) { oResp = new XMLHttpRequest(); } else if (window.ActiveXObject) { oResp = new ActiveXObject("Microsoft.XMLHTTP"); } if (oResp) { if (fncCallback) { if (typeof oResp.onload !== "undefined") oResp.onload = function() { fncCallback.apply(oResp, aArgs); oResp = null; }; else { oResp.onreadystatechange = function() { if (oResp.readyState === 4) { fncCallback.apply(oResp, aArgs); oResp = null; } }; } } oResp.open("GET", sURL, true); oResp.setRequestHeader("Content-Type", "text/plain"); oResp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); oResp.send(null); } } // recursive function which converts an XML DOM to a JavaScript Object function xml2Obj (oXMLDom) { var oRObj = true; if (oXMLDom.nodeType === 3) { // text oRObj = oXMLDom.nodeValue.replace(/^\s+|\s+$/g, ""); } else { if (oXMLDom.nodeType === 1) { // element // do attributes if (oXMLDom.attributes.length > 0) { var iAttrib; oRObj = {}; oRObj["@attributes"] = {}; for (var iAttrId = 0; iAttrId < oXMLDom.attributes.length; iAttrId++) { iAttrib = oXMLDom.attributes.item(iAttrId); oRObj["@attributes"][iAttrib.nodeName] = iAttrib.nodeValue; } } } // do children if (oXMLDom.hasChildNodes()) { var iKey, iValue, iXMLNode; if (oRObj === true) { oRObj = {}; } for (var iChildId = 0; iChildId < oXMLDom.childNodes.length; iChildId++) { iXMLNode = oXMLDom.childNodes.item(iChildId); iKey = iXMLNode.nodeType === 3 ? "@content" : iXMLNode.nodeName; iValue = xml2Obj(iXMLNode); if (oRObj.hasOwnProperty(iKey)) { if (iXMLNode.nodeType === 3) { oRObj[iKey] += iValue; } else { if (oRObj[iKey].constructor !== Array) { oRObj[iKey] = [oRObj[iKey]]; } oRObj[iKey].push(iValue); } } else if (iXMLNode.nodeType !== 3 || iValue !== "") { oRObj[iKey] = iValue; } } } } return(oRObj); }; // function called via ajax callback function myFunction() { // gets the object var oMyObject = xml2Obj(this.responseXML); // converts the object to a string and displays it in an alert message alert(JSON.stringify(oMyObject)); } </script> </head> <body> <span onclick="XHR('example.xml', myFunction);" style="cursor: pointer;">Click me!</span></p> </body> </html>

					
					
					
						
  Rispondi quotando