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... :(
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
}
}
}
}
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];
}
}