webForumDet fria alternativet

hämta info från XML

10 svar · 640 visningar · startad av roady

roadyMedlem sedan jan. 2002473 inlägg
#1

Jag söker, letar och bläddrar men hittar inga bra svar :(
Jag vill att man skall klicka på en knapp i flash och då läsa in just den informationen från en xml fil.

XML-filen: Information.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<info>
	<photo>
		<london name="London.jpeg" size="103kb" load="case/photo_london.swf">Bilderna är blandade från när jag var i london över nyår 2000 och när jag hälsade på en vän våren 2001.</london>
		<modell name="Modell.jpeg" size="151kb" load="case/photo_modell.swf">De första sju bilderna har jag tagit på fritid och lite till bilduppgifter när jag läste fotografi. De sista tog jag till Falkenbergs kommun i två olika arbeten.</modell>
	</photo>
	<knowledge>
		<grafit name="Grafit.info" size="103kb" load="case/knowledge_grafit.swf"></grafit>
	</knowledge>
</info>

jag har delat upp så jag har 2 st swf filer, en som är för att ladda in photo och en för att ladda in knowledge. Ifall vi exempelvis är i den för att ladda in foton så kan en knapp se ut såhär:

on (release) {
 showCase("london","information.xml");
}

och då ser scripten ut såhär för den swf-filen:

// Funktion för knapparna att få tillgång till XML-filen
function showCase(infoName,fileName) {
	var infoName;
	var fileName;
	
	
	myInfo 			= new XML(); // skapa ett xml-objekt
	myInfo.onLoad 	= newInfo;  // kör funktionen efter inladdning
	
	
	myInfo.ignoreWhite = true;	// fixa alla blanksteg
	myInfo.load(fileName);		// ladda in xmlfilen
	
	// funktion för att komma till root och childnodes
	function newInfo() {
		// loopar igenom xmlfilen för att se med childNodes.length hur många child nodes där är
		for (var count1=0; count1<=models.childNodes.length; count1++) {
			// hämta den "grupp" som man vill ha
			if (this.childNodes[count1].nodeName.toLowerCase() == "photo") {
				// lägg alla childNodes i en variabel
				infoDescription = this.childNodes[count1];
				}
		}

        // skicka variablen till nästa funktion för att plocka ur enskild node
		getInfo(infoDescription);	
}

// hämta ut specifik node och visa infon i flash
function getInfo(myInfo) {
	var myInfo;
	
	for (var count2=0; count2<=myInfo.childNodes.length; count2++) {
		if (myInfo.childNodes[count2].nodeName.toLowerCase() == infoName) {
			infoDescription = myInfo.childNodes[count2].firstChild;
			// Nu har vi fått tag på den node som vi vill ha
			
			_root.load_meny.show_text.text = infoDescription;								// här hämtar vi infon i noden
			_root.load_meny.show_headline.text = myInfo.childNodes[count2].attributes.name;	// Här hämtar vi attributet "name"
			_root.load_meny.show_size.text = myInfo.childNodes[count2].attributes.size;		// Här hämtar vi attributet "size"
			pic = myInfo.childNodes[count2].attributes.load;								// Här hämtar vi attributet "load"
			
			loadMovie(pic,"_root.load_show");//we load the swf into an empty MC
  		   }
	   }
   }
}

problemet nu är att ingenting händer. får varken någon fel i output fönstret eller att infon visas i mina textfält... :(

RödalacketMedlem sedan feb. 20002 612 inlägg
#2

Kanske är det nått sånt här du är ute efter...
http://www.lns.nu/wf/roady/roady.html
Filerna ligger där också.
http://www.lns.nu/wf/roady/ :)

roadyMedlem sedan jan. 2002473 inlägg
#3

Alltså..... du är ju hur grym som helst, nu blev jag jätteglad... *bamsekramar*

RödalacketMedlem sedan feb. 20002 612 inlägg
#4

Det var så lite så... :)

roadyMedlem sedan jan. 2002473 inlägg
#5

efter en fin framgång med inläsandet av xml-info till flash så har det självklart dykt upp problem igen.

I detta (bläddra uppåt) inlägget så har jag haft 2 nodes (eller vad det nu heter (photo och knowledge))...

men nu uppstår problem när jag vill ha 5st.
- <flash>
+ <photo>...undernoder...</photo>
+ <knowledge>...undernoder...</knowledge>
+ <case>...undernoder...</case>
+ <music>...undernoder...</music>
+ <contact>...undernoder...</contact>
</flash>

Det är bara de 2 första som fungerar (kan flytta om ordningen så funkar fortfarande bara de 2 översta "noderna")
Den röda raden är där man ändrar för att hämta in den "nodens" info.
Knappen man trycker på för att få fram infon är fortfarande

on (release) {
 showCase("undernoden","information.xml");
}

Koden ser ut som såhär:

System.useCodePage = true;
// Funktion för knapparna att få tillgång till XML-filen
function showCase(infoName, fileName) {
	var infoName;
	var fileName;
	myInfo = new XML();// skapa ett xml-objekt
	myInfo.onLoad = newInfo;// kör funktionen efter inladdning
	myInfo.ignoreWhite = true;// fixa alla blanksteg
	myInfo.load(fileName);// ladda in xmlfilen
	
	// funktion för att komma till root och childnodes
	function newInfo() {
		// loopar igenom xmlfilen för att se med childNodes.length hur många child nodes där är
		for (var count1 = 0; count1 <= myInfo.childNodes.length; count1++) {
			
			// hämta den "grupp" som man vill ha
			[red]if (myInfo.firstChild.childNodes[count1].nodeName.toLowerCase() == "case")[/red] {
				// lägg alla childNodes i en variabel
				infoDescription = myInfo.firstChild.childNodes[count1];
			}
			
		}
		
		// skicka variablen till nästa funktion för att plocka ur enskild node
		getInfo(infoDescription);
		
	}
	// hämta ut specifik node och visa infon i flash
	function getInfo(myInfo) {
		var myInfo
		for (var count2 = 0; count2 <= myInfo.childNodes.length; count2++) {
			if (myInfo.childNodes[count2].nodeName.toLowerCase() == infoName) {
				infoDescription = myInfo.childNodes[count2].firstChild.toString();
				// Nu har vi fått tag på den node som vi vill ha
				var pos;
				while ((pos = infoDescription.indexOf("|")) >= 0) {
					infoDescription = infoDescription.substr(0, pos) + "\n" + infoDescription.substr(pos + 1, infoDescription.length);
				}
				
				//_root.load_meny.show_text.text = infoDescription;
				_root.load_meny.show_text.text = infoDescription;
				// här hämtar vi infon i noden
				_root.load_meny.show_headline.text = myInfo.childNodes[count2].attributes.name;
				// Här hämtar vi attributet "name"
				_root.load_meny.show_size.text = myInfo.childNodes[count2].attributes.size;
				// Här hämtar vi attributet "size"
				pic = myInfo.childNodes[count2].attributes.load;
				// Här hämtar vi attributet "load"
				loadMovie(pic, _root.load_show);
				//we load the swf into an empty MC
			}
		}
	}
}
RödalacketMedlem sedan feb. 20002 612 inlägg
#6

Tror att det är här som den räknar fel

for (var count1 = 0; count1 <=[b]myInfo.childNodes.length[/b]; count1++) {
      // hämta den "grupp" som man vill ha
      if (myInfo.firstChild.childNodes[count1].nodeName.toLowerCase() == "case") {
           // lägg alla childNodes i en variabel
           infoDescription = myInfo.firstChild.childNodes[count1];
       }			
}

pröva med

for (var count1 = 0; count1 <= myInfo.firstChild.childNodes.length; count1++) {
      // hämta den "grupp" som man vill ha
      if (myInfo.firstChild.childNodes[count1].nodeName.toLowerCase() == "case") {
          // lägg alla childNodes i en variabel
          infoDescription = myInfo.firstChild.childNodes[count1];
      }
}
roadyMedlem sedan jan. 2002473 inlägg
#7

ännu en gång kommer du ridandes som en riddare och räddar mig *stor tack* =)

fumusMedlem sedan apr. 200139 inlägg
#8

Flash 6 vs Flash 8

Använder mig av samma funktion som ovan, men får den endast att fungera i Flash 6 men inte i Flash 8.
Någon som kan hjälpa/förklara varför?

mirandirMedlem sedan maj 2003750 inlägg
#9

Mest troligt beror det på att Flash 8 Actionscript skiljer på små och stora bokstäver medans Flash 6 inte gör det.

/Mirandir

fumusMedlem sedan apr. 200139 inlägg
#10

Förstår inte riktigt vad du menar?

När jag försöker att köra det i Flash 8, så får jag upp en ruta som säger att:

"A script is causing Flash Player to run slowly. if itcontinues to run, your computer may become unresponsive. Do you want to abort the script YES NO"

Men när jag kör det som F 6 så fungerar det hur bra som helst...

/Christer

fumusMedlem sedan apr. 200139 inlägg
#11

Löste sig, jag som slarvat med vad jag kallat saker och ting...

//Christer

138 ms totalt · 3 externa anrop · v20260731065814-full.102f7fcd
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)