Avatar billede kalleballe Nybegynder
24. juni 2003 - 15:33 Der er 11 kommentarer og
1 løsning

Hente en 1 xml post og ikke HELE indholdet

Jeg har lavet en funktion der kan løbe hele min xml fil igennem og hente alle de forskellige variabler.

Faktisk ved hjælp af et script fra William Drols bog, - object-oriented Macromedia Flash MX

fx:

XMLNode.prototype.sendNodes = function(searchName, callback)

{
   
// sender alle noder der matcher searchName
// til callback funktion i frame 2
// Genbruges til at besøge alle nestede noder uanset hirakisk placering
       
for(var i = 0; i<this.childNodes.length; i++)
       
       
       
{
    var currentNode = this.childNodes[i];
           
           
           
    if(currentNode.nodeName == searchName)
               
               
               
    callback(currentNode);
               
    if(currentNode.childNodes.length > 0)
               
    currentNode.sendNodes(searchName, callback);
           
}
       
}


kaldes med: // altså 'mainText'

function handleMainText(node)

{
   
trace("handleMainText er " +node.firstChild);
MainText.push(node.firstChild);
   
}


efter at jeg har lavet et object etc:

stop();

var myDoc = new XML();
var myDocName = "min xml fil";

myDoc.onLoad = checkStatus;
myDoc.load(myDocName);



function checkStatus(success)
{
    if(success)
   
{       

// skal naturligvis passe til xml filen, - men bare for eksemplets skyld har jeg kun medtaget denne ene post

myDoc.sendNodes("mainText" , handleMainText)
                       
} else {
       
checkStatus();
   
}

   
}




I min xml fil har jeg så 3 hoved poster, project 1,2,3:

<flash title="xml fil til test">

<project id="1">
<headTitle><b>test 1</b></headTitle>
<subTitle><b>Good morning world</b></subTitle>
<mainText>Lorem ipsum dolor sit ame consectetuer.</mainText>
</project>

<project id="2">
<headTitle><b>test 2</b></headTitle>
<subTitle><b>Good morning world</b></subTitle>
<mainText>Lorem ipsum dolor sit ame consectetuer.
</mainText>
</project>

<project id="3">
<headTitle><b>test 3</b></headTitle>
<subTitle><b>Good morning world</b></subTitle>
<mainText>Lorem ipsum dolor sit ame consectetuer.</mainText>
</project>   
   
</flash>

Det virker fint, - jeg får alt dataen fra xml filen etc.

Problemet er så at jeg har 3 knapper, - lad os kalde dem 1,2 og 3 ;-)

Og jeg vil så gerne have det sådan at jeg kun får det der svarer til project 1 når jeg trykker på 1, det der svarer til project 2 når jeg trykker på 2 etc, -

jeg kan ikke rigtig finde ud af at få mit xml ark sorteret - jeg tænkte på om man ikke skulle forsøge noget lignende:

Find den post der hedder noget med project, - lav nyt array med den data der er indtil vi når til en ny post der hedder noget med project, - lave nyt array med den data der så kommer etc så vi altså har et array med diverse data for hvert projekt og når jeg så trykker på 1 så er det dataen i array 1 jeg bruger etc etc.

Men hvordan laver jeg lige det og måske er der en lettere måde etc.

Mange venlige hilsner

KalleBalle
Avatar billede barklund Nybegynder
24. juni 2003 - 16:27 #1
Det kan laves meget smartere:

xml_str = '<flash title="xml fil til test"><project id="1"><headTitle><b>test 1</b></headTitle><subTitle><b>Good morning world</b></subTitle><mainText>Lorem ipsum dolor sit ame consectetuer.</mainText></project><project id="2"><headTitle><b>test 2</b></headTitle><subTitle><b>Good morning world</b></subTitle><mainText>Lorem ipsum dolor sit ame consectetuer.</mainText></project><project id="3"><headTitle><b>test 3</b></headTitle><subTitle><b>Good morning world</b></subTitle><mainText>Lorem ipsum dolor sit ame consectetuer.</mainText></project></flash>';
loaded_xml = new XML(xml_str);
XMLNode.prototype.getData = function() {
    var projects = new Array();
    var i, node, n = this.firstChild.childNodes
    var p;
    for (i in n) {
        node = n[i];
        p = projects[node.attributes.id] = new Object();
        for (j in node.childNodes) {
            p[node.childNodes[j].nodeName] = node.childNodes[j].firstChild.toString();
        }
    }
    return projects;
}
t = loaded_xml.getData();
for (i in t) {
    s = "t["+i+"] = ";
    for (j in t[i]) {
        s += j+": "+t[i][j]+", ";   
    }
    trace(s);
}

Det kan selvfølgelig nemt laves med en ekstern xml også... Forskellen er den samme...
Avatar billede kalleballe Nybegynder
24. juni 2003 - 16:51 #2
takker, bukker og skraber ;-)
Avatar billede barklund Nybegynder
24. juni 2003 - 18:54 #3
Virker det?
Avatar billede kalleballe Nybegynder
26. juni 2003 - 17:35 #4
Lige et andet spørgsmål:

jeg har et dynamisk text felt som henter sin fonttype ind via xml.

således:

    _root.createTextField("mytext"+i, 90, 100, 100, 300, 300);
         
    this["mytext"+i].autoSize = true;
    this["mytext"+i].multiline = true;
    this["mytext"+i].wordWrap = true;
    this["mytext"+i].border = false;
    this["mytext"+i].text = tag[i];
   
    myformat = new TextFormat();
   
    myformat.color = String(tagColor[i]);
    myformat.size = String(tagSize[i]);
    myformat.font = String(tagFont[i]);
    myformat.embedFonts = true;
    myformat._rotation = 45;
    this["mytext"+i].setTextFormat(myformat);


problemet er at jeg ikke kan få fontene embeddet, - hva gør jeg galt?

rotation virker derfor heller ikke....

tagFont[i] har navnet på min skrifttype.
Avatar billede barklund Nybegynder
26. juni 2003 - 17:39 #5
Når du dynamisk vælger fonten, så kan du jo ikke fra starten embedde den(?). Hvordan skal flash kunne gætte sig til, hvilken font du dynamisk sætter?
Avatar billede kalleballe Nybegynder
26. juni 2003 - 17:41 #6
I don't know, - hva med om jeg lavede nogle helt normale kedelige tekst felter med de forskellige skrifttyper jeg kan komme ud for bliver hentet dynamisk og så embedder dem
Avatar billede kalleballe Nybegynder
26. juni 2003 - 17:43 #7
altså lige som lokker flash til at embedde....
Avatar billede barklund Nybegynder
26. juni 2003 - 17:48 #8
Hvilket ville virke fint!
Avatar billede kalleballe Nybegynder
26. juni 2003 - 17:55 #9
og dog... jeg har nu lavet et lag med en embeddet font.
så henter jeg mit font navn fra xml filen og laver et dynamisk textfelt, -

teksten ses fint, - men UDEN rotation... hvordan kan det nu være??

this["mytext"+i].autoSize = true;
    this["mytext"+i].multiline = true;
    this["mytext"+i].wordWrap = true;
    this["mytext"+i].border = false;
    this["mytext"+i].text = tag[i];
   
    myformat = new TextFormat();
   
    myformat.color = String(tagColor[i]);
    myformat.size = String(tagSize[i]);
    myformat.font = String(tagFont[i]);
    myformat.embedFonts = true;
    myformat._rotation = 45;
    this["mytext"+i].setTextFormat(myformat);
Avatar billede kalleballe Nybegynder
26. juni 2003 - 18:11 #10
jeg går ud fra at grunde til at den ikke vil rotere er at den ikke opfatter fonten som embeddet...
Avatar billede kalleballe Nybegynder
26. juni 2003 - 18:18 #11
this["mytext"+i].embedFonts = true;
this["mytext"+i]._rotation = 45;

nu virker det squ...
Avatar billede barklund Nybegynder
26. juni 2003 - 21:32 #12
Wee.. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester