Avatar billede warpgiga Nybegynder
19. december 2001 - 10:42 Der er 16 kommentarer og
2 løsninger

Læsning af XML data fra JavaScript

Hejsa allesammen

Jeg har lavet et lille dhtml program der skal hente data i xml format, som ser sådan ud:

<videocollection id=\"Warp\">
    <video imdb=\"7654321\">
        <maintitle values=\"The Mummy\" lang=\"en\" />
        <videolength value=\"127\" />
    </video>
    <maintitle values=\"ERROR Illegal title\" lang=\"en\" />
    <video imdb=\"1655521\">
        <maintitle values=\"The Mummy Returns\" lang=\"en\" />
        <videolength value=\"134\" />
    </video>   
</videocollection>

I mozilla har jeg ingen problemer, da den bare gør som den bør. Men IE (6) nægter for hårdt.

her er hvad jeg gør:

var vcObj = dataIFrame.document.getElementsByTagName(\"videocollection\");

var tmpVdo = vcObj[vci].getElementsByTagName(\"video\");
alert(tmpVdo.length)

- Her er det så at IE6 alerter 0 og Mozilla 2 som er det korrekte, idet der er 2 video tags.
Jeg kan kun få .getElementsByTagName() til at virke i IE6 når jeg sætter document foran, men det vil jeg ikke da den så returnerer alle maintitles f.eks, og den jo kun må returnere dem der i dens eget video tag.. pheww. håber it makes any sense ;)

Den er lidt svær, men forhåbentlig er der en derude med erfaring i lige netop dette ;) - Mvh Fini
Avatar billede warpgiga Nybegynder
19. december 2001 - 10:45 #1
xml dataen bliver pt. inkluderet via en iframe.
Avatar billede warpgiga Nybegynder
19. december 2001 - 10:46 #2
vci=0
Avatar billede warpgiga Nybegynder
19. december 2001 - 10:50 #3
bemærk: det skal være en .html fil man inkluderer i iframen, ellers vil IE ikke ha\' det.. Mozila vil godt..
Avatar billede altinet Nybegynder
19. december 2001 - 12:28 #4


Avatar billede warpgiga Nybegynder
19. december 2001 - 12:31 #5
?? ;)
Avatar billede altinet Nybegynder
19. december 2001 - 12:47 #6
:-) Fik trykket \"Udfør\" uden at have indtastet andet end et \"mellemrum\"...

Har du prøvet at lave et XML tag i din HTML, og så loade xml data derfrá ind i et egentligt XML objekt?

Eksempel:
<xml id=\"videoCollection\" async=\"false\" src=\"videocollection.xml\"></xml>

objXML = new ActiveXObject(\'Microsoft.XMLDom\');
objXML.async=false;
objXML.loadXML(document.getElementById(\'xmlEpnr\').xml);

\"async=false\" sikrer at scriptet ikke fortsætter før XMLdata er loadet i objektet.

Når objektet er loadet, kan du traversere det ved hjælp af Xpath. Hvis du har brug for det, kan jeg sende dig en hjælpefil fra Microsoft der kan vise hvordan.

:-) Lars/Altinet

:-) Lars
Avatar billede altinet Nybegynder
19. december 2001 - 12:53 #7
Ja, copy-paste har mange faldgruber.....
objXML.loadXML(document.getElementById(\'xmlEpnr\').xml);
skulle selvfølgelig have været...
objXML.loadXML(document.getElementById(\'videoCollection\').xml);

:-) Lars
Avatar billede warpgiga Nybegynder
19. december 2001 - 12:56 #8
Hey Lars: Det lyder som en mulig løsning til IE, dog ikke så cross-browser, det burde være muligt uden brug af activeX. Jeg tror jeg leder videre, men tak for forslaget ;o)
Avatar billede warpgiga Nybegynder
19. december 2001 - 13:32 #9
jeg overvejer at bruge et mere html-venligt format som dette i håb om at begge browsere bliver mægtigt glade ;)

Men jeg ville dog hellere bruge et format som det i toppen af denne side.

<table id=\"myCollection\">
<th>
    <td id=\"vdoTitle\">Main Title</td>
    <td id=\"vdoIMDB\">IMDB#</td>   
    <td id=\"vdoYear\">Year</td>
    <td id=\"vdoGenre\">Genre</td>       
</th>
<tr>
    <td id=\"vdoTitle\">Titanic</td>
    <td id=\"vdoIMDB\">7654321</td>   
    <td id=\"vdoYear\">1998</td>
    <td id=\"vdoGenre\">3</td>       
</tr>
<tr>
    <td id=\"vdoTitle\">Wargames</td>
    <td id=\"vdoIMDB\">7654321</td>       
    <td id=\"vdoYear\">1998</td>   
    <td id=\"vdoGenre\">3</td>       
</tr>
</table>
Avatar billede altinet Nybegynder
19. december 2001 - 13:52 #10
Jeg mener altså at både IE5.5+, NS6 og Mozilla understøtter både, W3C DOM og XML DOM, sidstnævnte i hvertfald i version 2.5.
Har du prøvet at gøre som jeg nævner?
Udtrykket \'Microsoft.XMLDom\' betyder ikke at det kun er IE der forstår det, blot at det var Microsoft der først definerede \"standarden\". \'Microsoft.XMLDom\' er blot en \"progID\" for objektet.

Hvad angår ActiveX objektet, er jeg ikke en haj i forhold til NS og Mozilla, men mon ikke de har en lignende metode?
Du bliver jo nok nødt til at \"branche\" lidt, men det kan måske begrænses til selve oprettelsen af XML objektet?!

:-) Lars
Avatar billede x4all_dk Nybegynder
19. december 2001 - 13:57 #11
Sådan trækker jeg data ud fra xml-filer i JS(domxml)


var xmlB=new ActiveXObject(\"Microsoft.XMLDOM\")
xmlB.async=\"false\"
xmlB.load(\"bills.xml\")
xmlB=xmlB.documentElement

for (i=0;i<xmlB.childNodes.length;i++) {
document.write(\'xmlB.getElementsByTagName(\"User\").item(i).text;\')
}
Avatar billede warpgiga Nybegynder
19. december 2001 - 13:58 #12
Hej Lars

Hvis jeg ikke tager fejl her så er linien:
objXML = new ActiveXObject(\'Microsoft.XMLDom\');
et rimeligt stort bevis for at det er et activeXObject der her er tale om at oprette. Det kan man ikke i NS/Moz.
Det er dog korrekt at de begge understøtter xml i en eller anden forstand ;)
Avatar billede warpgiga Nybegynder
19. december 2001 - 14:00 #13
Jeg ret sikker på at Microsoft ikke definerede XML standarden, men at det blot er navnet på en af deres XML Parser-Engines eller lign. ;)
Avatar billede altinet Nybegynder
19. december 2001 - 15:37 #14
Prøv..

objXML=document.getElementById(\'videoCollection\').XMLDocument;

<xml id=\"videoCollection\" async=\"false\" src=\"videocollection.xml\"></xml>

Og se om ikke det virker i NS6 og Moz. Det er jeg lige ved at tro det gør.

:-) Lars
Avatar billede warpgiga Nybegynder
19. december 2001 - 15:49 #15
Lars: Det sidste forslag virker desværre ikke i NS6/Moz..  ;(
Avatar billede warpgiga Nybegynder
20. december 2001 - 02:40 #16
ok, jeg har fået det til at virke med jeres forslag ;)

if(document.all) { // make better IE detection here!!!!!!!
   
    var xmlB=new ActiveXObject(\"Microsoft.XMLDOM\");
    xmlB.async=\"false\";
    xmlB.load(\"old_data.xml\");
    xmlB=xmlB.documentElement;

    for (i=0;i<xmlB.childNodes.length;i++) {

        alert( xmlB.getElementsByTagName(\"videocollection\").length + \' - \' + xmlB.childNodes.item(i).tagName);
    }

    var vcObj = xmlB.getElementsByTagName(\"videocollection\");
}
else {

    var vcObj = dataIFrame.document.getElementsByTagName(\"videocollection\");
}

note: mozilla trækker dataen fra en iframe:
<iframe src=\"old_data.xml\" name=\"vdoData\" id=\"vdoData\" ...

Avatar billede warpgiga Nybegynder
20. december 2001 - 02:42 #17
Tusind tak for hjælpen gutter ;)

May the force & the power of the rings be with you!!
Avatar billede altinet Nybegynder
21. december 2001 - 09:28 #18
Godt du fandt en løsning!
:-) Lars
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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