Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    4

    assegnazione file xml a variabile

    salve a tutti, è da molto che vi seguo ed è da molto che faccio uso delle vostre guide e per questo vorrei ringraziarvi dell'ottimo sito è però da poco che ho cominciato ad imparare javascript e mi trovo di fronte ad un problema: vorrei assegnare un file (che si trova nello stesso progetto del file .js su cui sto lavorando ma in un'altra cartella) ad una variabile. Più semplicemente: possiedo un file in /home/a.xml e nel file /home/cartella1/cartella2/b.js devo richiamare il contenuto del file a.xml assegnandolo ad una variabile. Qualche dritta?
    Grazie anticipatamente

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ritengo che dovrai usare ajax per caricare i dati, e documentati anche riguardo alle dimensioni massime che può contenere una variabile.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530
    Se il file tipo-XML lo puoi trattare e salvare come file di testo .txt
    allora possiamo farlo "leggere" a JavaScript come contenuto di un IFRAME "di servizio".

    Questo come file a.txt
    codice:
    l
      <?xml version="1.0" ?> 
    - <dati>
        <cognome>URATI</cognome> 
        <nome>Piero</nome> 
      </dati>
    Il .js lavora su una documento HTML c.html
    codice:
    <html>
    <script>
    
    var theVar = '';
    
    function readFile(){
     alert(theVar = document.frames[0].document.getElementsByTagName("pre")[0].innerHTML);
     document.write('<pre>' + theVar + '</pre>');
     }
    
    </script>
    
    <body onload="readFile()">
                              <iframe src="a.txt"></iframe>
    </body></html>
    Come punto di partenza della mezzanotte .. può andare
    ... e tenendo conto che la sintassi di lettura del contenuto di un IFRAME varia da Browser a Browser: questo lo puoi/devi provare con InternetExplorer.

  4. #4
    La soluzione di Enzaccio è un po' una porcata secondo me, no offense.

    Come dice cavicchiandrea io userei una chiamata ajax tramite l'oggetto XMLHttpRequest.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  5. #5
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Un po' di esempi.... se t'interessa ottenere solo il file XML e caricarlo in una variabile, ti può essere utile questo:
    codice:
    <!doctype html>
    <html>
    <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
    <title>Leggere file XML</title>
    <script type="text/javascript">
    function stateChange() {
    	if (this.readyState === 4) { this._fCallback.apply(this, this._aArgs); }
    }
    
    function XHR(sURL, fCallback /*, argumentToPass1, argumentToPass2, etc. */) {
    	var oResp = new XMLHttpRequest();
    	if (fCallback) {
    		oResp._fCallback = fCallback;
    		oResp._aArgs = Array.prototype.slice.call(arguments, 2);
    		oResp.onreadystatechange = stateChange;
    	}
    	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);
    }
    
    function myFunction() {
    	var oMyObject = this.responseXML; // la tua variabile
    	alert(oMyObject);
    }
    
    </script>
    </head>
    
    <body>
    
    
    <span style="text-decoration: underline; cursor: pointer;" onclick="XHR('a.xml', myFunction);">Clicca qui</span></p>
    </body>
    </html>
    Questa l'avevo scritta per Mozilla Developer Center... converte il contenuto di un file XML in un albero di oggetti javascript, rispettando la convenzione di Parker. Se non vuoi che l'oggetto generato sia in sola lettura, devi eliminare la chiamata Object.freeze(vResult);...:

    codice:
    <!doctype html>
    <html>
    <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
    <title>XML to JavaScript Object conversion example</title>
    <script type="text/javascript">
    function stateChange() {
    	if (this.readyState === 4) { this._fCallback.apply(this, this._aArgs); }
    }
    
    function XHR(sURL, fCallback /*, argumentToPass1, argumentToPass2, etc. */) {
    	var oResp = new XMLHttpRequest();
    	if (fCallback) {
    		oResp._fCallback = fCallback;
    		oResp._aArgs = Array.prototype.slice.call(arguments, 2);
    		oResp.onreadystatechange = stateChange;
    	}
    	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);
    }
    
    function buildValue (sValue) {
    	if (sValue.search(/^\s*$/) > -1) { return(null); }
    	else if (sValue.search(/^(true|false)$/i) > -1) { return(sValue.toLowerCase() === "true"); }
    	else if (isFinite(sValue)) { return(parseFloat(sValue)); }
    	else if (isFinite(Date.parse(sValue))) { return(new Date(sValue)); }
    	else { return(sValue); }
    }
    
    function getXMLData (oXMLParent) {
    	var vResult = true; nLength = 0, sTxtContent = "";
    	if (oXMLParent.hasAttributes()) {
    		vResult = {};
    		for (nLength; nLength < oXMLParent.attributes.length; nLength++) {
    			iAttrib = oXMLParent.attributes.item(nLength);
    			vResult["@" + iAttrib.nodeName.toLowerCase()] = buildValue(iAttrib.nodeValue.replace(/^\s+|\s+$/g, ""));
    		}
    	}
    	if (oXMLParent.hasChildNodes()) {
    		var iKey, iValue, iXMLChild;
    		for (var iChildId = 0; iChildId < oXMLParent.childNodes.length; iChildId++) {
    			iXMLChild = oXMLParent.childNodes.item(iChildId);
    			if (iXMLChild.nodeType === 1 && !iXMLChild.prefix) {
    				if (nLength === 0) { vResult = {}; }
    				iKey = iXMLChild.nodeName.toLowerCase();
    				iValue = getXMLData(iXMLChild);
    				if (vResult.hasOwnProperty(iKey)) {
    					if (vResult[iKey].constructor !== Array) { vResult[iKey] = [vResult[iKey]]; }
    					vResult[iKey].push(iValue);
    				} else { vResult[iKey] = iValue; nLength++; }
    			} else if (iXMLChild.nodeType === 3) { sTxtContent += iXMLChild.nodeValue.replace(/^\s+|\s+$/g, ""); }
    			else if (iXMLChild.nodeType === 4) { sTxtContent += iXMLChild.nodeValue; }
    		}
    	}
    	if (nLength > 0) { vResult.keyValue = buildValue(sTxtContent); Object.freeze(vResult); } else if (sTxtContent) { vResult = buildValue(sTxtContent); }
    	return (vResult);
    }
    
    function myFunction() {
    	var myFile = this.responseXML; // il file XML...
    	var oMyObject = getXMLData(myFile); // il contenuto del file XML convertito in un albero di oggetti javascript...
    	alert(JSON.stringify(oMyObject));
    }
    </script>
    </head>
    
    <body>
    
    
    <span style="text-decoration: underline; cursor: pointer;" onclick="XHR('a.xml', myFunction);">Clicca qui</span></p>
    </body>
    </html>
    Cia'

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    4
    grazie a tutti per le dritte. ho risolto facendo uso di un asyncrequest con yui ora però mi trovo difronte ad un altro problema. dall'xml ottenuto devo estrapolare alcuni dati essenziali. non avendo mai dovuto fare una cosa del genere mi trovo un po' spaesato. vi spiego il mio problema, l'xml è composto nel seguente modo:

    codice:
    <rdf:RDF xml:blabla="blabla">
    <tag1 rdf:blabla="blabla">
    <rdfs:bla>Auto</rdfs:bla>
    <tag2>Fiat</tag2>
    </tag1>
    </rdf:RDF>
    questa parte di codice appare più volte nel file xml. ora quello che sono riuscito a fare è ad identificare tutti i nodi principali, cioè quelli che cominciano per rdf:RDF, usando getElementsByTagName che vengono assegnati ad un array. quello che voglio ottenere è Fiat dunque andando a percorrere l'array dei nodi principali dovrei (da quello che mi pare di aver capito) utilizzare getElementsByTagName("tag2") per ottenere Fiat. l'unico problema è che il risultato che viene stoccato in un'altro array è un oggetto di tipo Element e loggando il tutto nella console piuttosto che apparire la stringa Fiat mi appare <tag2> (e cliccandoci sopra firebug mi "reindirizza" al file xml mostrandomi la riga corrispondente. come faccio per ottenere Fiat???

    spero di essermi spiegato

  7. #7
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Il codice che ti ho mandato (secondo esempio) serve anche a leggere il contenuto di un file xml in maniera semplice. Se però non ti è sufficiente dovrai usare la libreria XPath: https://developer.mozilla.org/en/Using_XPath (in bocca al lupo).

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    codice:
    getElementsByTagName("tag2")[0].childNodes[0].nodeValue

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    4
    Originariamente inviato da carlomarx
    Il codice che ti ho mandato (secondo esempio) serve anche a leggere il contenuto di un file xml in maniera semplice. Se però non ti è sufficiente dovrai usare la libreria XPath: https://developer.mozilla.org/en/Using_XPath (in bocca al lupo).
    grazie ma ero alla ricerca di qualcosa di più immediato visto che la maggior parte di codice l'ho già scritta

    Originariamente inviato da Vindav
    codice:
    getElementsByTagName("tag2")[0].childNodes[0].nodeValue
    grazie mille, funziona

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.