Avatar billede Shasim Novice
08. september 2006 - 12:08 Der er 16 kommentarer og
1 løsning

XML til Flash, meget basalt

Hej

Er helt grøn i xml, og sidder med en xml-fil indeholdende forskellige tekst stumper, som skal hentes ind i min Flash.

<?xml version="1.0" encoding="iso-8859-1" ?>
- <root>
  <datasource>bla-bla</datasource>
  <timestamp>08-09-2006 08:44:34</timestamp>
  <siteid>2523</siteid>
  <siteheader>bla-bla</siteheader>
- <page>
  <pageid>26982</pageid>
- <pageheader>
- <![CDATA[ welcome
  ]]>
  </pageheader>
- <para>
  <paraid>71692</paraid>
- <paraheader>
- <![CDATA[
  ]]>
  </paraheader>
- <paracontents>
- <![CDATA[
  ]]>
  </paracontents>
  <parapicture />
  </para>
  </page>
- <page>
  <pageid>26983</pageid>
- <pageheader>
- <![CDATA[ what we do
  ]]>
  </pageheader>
- <para>
  <paraid>71693</paraid>
- <paraheader>
- <![CDATA[
  ]]>
  </paraheader>
- <paracontents>
- <![CDATA[ bla-bla ]]>
  </paracontents>
  <parapicture />
  </para>
  </page>

Det jeg vil er at hente en bestemt 'paracontents' ind i et bestemt dyn. tekstfelt, men hvordan gør man det?

Her er min load-funktion:
content = new XML();
content.onLoad = function(ok){
  if(ok) trace(this); //udskriver xml'en
  }
content.load("http://www.bla-bla");

Kan nogen hjælpe mig lidt videre?
Avatar billede mat Nybegynder
08. september 2006 - 14:15 #1
Nu skriver du ikke hvad der afgør hvilken "paracontents" der skal hentes? Og jeg går udfra at den manglende </root> er en copy-paste fejl.

Men; Du finder <root> elementet med this.firstChild, den har så et array af childNodes, som du derfor henter med;

this.firstChild.childNodes;

Dette vil i ovenstående returnere et array med referencer til elementerne; <datasource>, <timestamp>, <siteid>, <siteheader>, <page>, <page>.

Så hvis du vil finde <paracontents> skal du først finde et <page> element. Dvs at du er nødt til at iterere gennem dette array og spørge om;

this.firstChild.childNodes[iterator].nodeName == "page"

Hvis ovenstående er true, så fisker du deres childNodes ud, og gennemsøger hvert af dem indtil du har fundet den <paracontents> du ønsker...

go go go...

mvh mat
Avatar billede mat Nybegynder
08. september 2006 - 14:18 #2
(og alle de "redskaber" du skal bruge står i hjælpen under "XML")
Avatar billede Shasim Novice
08. september 2006 - 14:37 #3
xml'en er ændret lidt siden spørgsmålet blev oprettet:

<?xml version="1.0" encoding="iso-8859-1" ?>
- <root>
- <page>
- <pageheader>
- <![CDATA[ welcome
  ]]>
  </pageheader>
- <para>
- <paraheader>
- <![CDATA[
  ]]>
  </paraheader>
- <paracontents>
- <![CDATA[
  ]]>
  </paracontents>
  </para>
  </page>
- <page>
- <pageheader>
- <![CDATA[ what we do
  ]]>
  </pageheader>
- <para>
- <paraheader>
- <![CDATA[
  ]]>
  </paraheader>
- <paracontents>
- <![CDATA[ Bla-bla.  ]]>
  </paracontents>
  </para>
  </page>
</root>

Det afgørende for hvilken <paracontents>, der skal bruges er vist <pageheader><![CDATA[ what we do
  ]]>

Men jeg aner ikke hvordan jeg får en funktion til at kigge igennem hele xml'en og så finde en <pageheader> der indeholder en bestemt værdi, og så tage <paracontents> delen og smide i et dynamisk teksfelt eller en variabel...
Kan du hjælpe mig lidt mere?
Avatar billede Shasim Novice
08. september 2006 - 14:47 #4
Kan jeg ikke trace bare for at se om jeg overhovedet får fat i noget som helst, altså fx.
trace(content.firstChild.firstChild.nodeType);
eller noget ligenende...
Avatar billede mat Nybegynder
08. september 2006 - 15:02 #5
jo da, trace(this.firstChild.firstChild) og se :)
Avatar billede Shasim Novice
08. september 2006 - 15:04 #6
null
Avatar billede Shasim Novice
08. september 2006 - 15:06 #7
ellers har jeg uanset hvordan jeg har forsøgt at finde noget fået undefined
Avatar billede mat Nybegynder
08. september 2006 - 15:09 #8
Du skal gøre det inde i din onLoad handler;

content.onLoad = function(ok){
  if(ok) trace(this.firstChild.firstChild); //udskriver xml'en
}
Avatar billede Shasim Novice
08. september 2006 - 15:19 #9
Det er også det jeg har gjort, og så får jeg null... men det er vel også bedre end undefined?
Avatar billede Shasim Novice
08. september 2006 - 15:27 #10
Hvis jeg nøjes med at skrive this, så udskrives hele xml'en:

content.onLoad = function(ok){
  if(ok) trace(this); //udskriver xml'en
}
Avatar billede Shasim Novice
08. september 2006 - 15:37 #11
Kan du ikke lokkes til at hjælpe lidt mere (indlæg kl. 14.37) - jeg disker gerne op med flere points :)
Avatar billede Shasim Novice
08. september 2006 - 19:25 #12
Nå, nu virker mine traces (ignoreWhite manglede vist), så mangler jeg bare resten... så hvis nogen er friske med et bud :)
Avatar billede Shasim Novice
11. september 2006 - 08:38 #13
Kunne virkelig godt bruge noget hjælp til at lave den her omgang for-løkker, så jeg kan finde de rigtige noder... er der slet ingen eksperter tilbage på Eksperten...?
Avatar billede mat Nybegynder
11. september 2006 - 12:02 #14
content.onLoad = function(ok) {
    if ( ok ) {
        pages = this.firstChild.childNodes;
        for ( i = 0; i < pages.length; i++ ) {
            if ( pages[i].firstChild.firstChild.nodeValue == "what we do" ) {
                my_page = pages[i];
                break;
            }
        }
        trace(my_page);
    }
}

Arrays, løkker og hjælpen (F1) - thats it ;)

mvh mat
Avatar billede Shasim Novice
11. september 2006 - 12:10 #15
Nemlig :) Tak jeg prøver om lidt. Var nået til bare at linke direkte til de enkelte nodes, men det er jo ikke særligt dynamisk...
Avatar billede Shasim Novice
18. september 2006 - 08:42 #16
Hov - det var mærkeligt!!! Havde lagt en kommentar her i fredags, som nu er væk!

Nå, men det gik så på at jeg fik ovenstående til at virke, så hurra for det.
mat skal lægge et svar, så han kan få points.
Avatar billede mat Nybegynder
18. september 2006 - 13:05 #17
oki
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