Avatar billede micbett Nybegynder
23. juni 2004 - 10:52 Der er 11 kommentarer og
1 løsning

selectSingleNode og nextNode

Hvordan får jeg fat i nextNode
eks.:
-<cube>
-<cube time="24-02">
  <cube x="bla bla">
-<cube time="23-02">
  <cube x="bla bla">
-<cube time="22-02">
  <cube x="bla bla">

uddrag:
var date=xmldoc.selectSingleNode("//cube//cube")
document.write(date.getAttribute("time"))

Så skriver den :  24-02
men hvordan får jeg fat i den næste (23-06), jeg har prøvet flere forskellige fra w3school, men jeg kan ikke få fat i den og det burde vist være ret simpelt
Avatar billede atoft Nybegynder
23. juni 2004 - 11:02 #1
Bruge dette i stedet.

var dates = xmldoc.selectNodes('//cube/cube')
for (var i = 0 ; dates.length; i++) {
  var date = dates[i]
  ..
  ..
}
Avatar billede atoft Nybegynder
23. juni 2004 - 11:11 #2
hvis dine cube's kan være nestede i det uendelige skal du lige have en ekstra / i xpath'en således

xmldoc.selectNodes('//cube//cube')
Avatar billede atoft Nybegynder
23. juni 2004 - 11:13 #3
og hvis du kun skal have fat i dem med time attributten så er det

xmldoc.selectNodes('//cube[@time]')
Avatar billede micbett Nybegynder
23. juni 2004 - 14:22 #4
Jeg skal kun have fat i de 2 første, og de skal udskrives i 2 rækker.

24-02      23-02
bla bla    bla bla

Jeg har prøvet din første løsning og så rettet min document.write(date.getAttribute("time")) til document.write(date[0].getAttribute("time")) men det virker ikke. Den siger at 'date0 er null eller ikke et objekt.
Avatar billede atoft Nybegynder
23. juni 2004 - 14:27 #5
det skal jo også være

document.write(dates[0].getAttribute("time"))

med s i dates
Avatar billede micbett Nybegynder
23. juni 2004 - 14:54 #6
jeg har prøvet at teste din kode sådan, men må gøre et eller andet galt.
<html>
<head>
<script type="text/javascript">
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("http://www.nationalbanken.dk/DNDK/valuta.nsf/valuta-hist.xml")

var dates = xmlDoc.selectNodes('//cube/cube')
for (var i = 0 ; dates.length; i++) {
  var date = dates[i]
}
</script>
</head>
<body>
Dato
<script>document.write(dates[0].getAttribute("time"))</script>
<script>document.write(dates[1].getAttribute("time"))</script>
</body>
</html>
Avatar billede micbett Nybegynder
23. juni 2004 - 15:08 #7
Hvis jeg retter til //Cube/Cube (store forbogstaver!)
Så kommer den første dato, men før den næste kommer, får jeg en fejlmeddelelse der siger at scriptet får computeren til at køre så langsomt at hvis jeg ikke stopper det, vil den måske ikke svare på input.
Avatar billede micbett Nybegynder
24. juni 2004 - 08:27 #8
Jeg har nu prøvet med: xmldoc.selectNodes('//cube[@time]') og så får jeg begge datoer, men først efter jeg har svaret JA til at stoppe scriptet, da jeg stadig får ovennævnte advarsel. Har du en god ide om hvorfor den gør det.

Men du har jo svaret på spørgsmålet, så tak.

PS - jeg har ikke brugt de 2 gange .. som du havde sat ind da jeg så får flere forskellige fejlmeddelelser.
Avatar billede atoft Nybegynder
24. juni 2004 - 10:00 #9
Ja det tror fanden. Min fejl :-(

<html>
<head>
<script type="text/javascript">
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("http://www.nationalbanken.dk/DNDK/valuta.nsf/valuta-hist.xml")

var dates = xmlDoc.selectNodes('//cube/cube')
for (var i = 0 ; i < dates.length; i++) {
  var date = dates[i]
}
</script>
</head>
<body>
Dato
<script>document.write(dates[0].getAttribute("time"))</script>
<script>document.write(dates[1].getAttribute("time"))</script>
</body>
</html>

Det er

for (var i = 0 ; i < dates.length; i++) {

som jeg har rettet.
Avatar billede atoft Nybegynder
24. juni 2004 - 10:03 #10
Nu sidder jeg så lige og kigger på koden.

Du behøver jo slet ikke at lave

for -løkken.

da du refererer direktet til [0] og [1]

så dette kan køre det.

<html>
<head>
<script type="text/javascript">
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("http://www.nationalbanken.dk/DNDK/valuta.nsf/valuta-hist.xml")

var dates = xmlDoc.selectNodes('//cube/cube')

</script>
</head>
<body>
Dato
<script>document.write(dates[0].getAttribute("time"))</script>
<script>document.write(dates[1].getAttribute("time"))</script>
</body>
</html>
Avatar billede atoft Nybegynder
24. juni 2004 - 10:09 #11
alternativt kan du gøre dette.

<html>
<head>
<script type="text/javascript">
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("http://www.nationalbanken.dk/DNDK/valuta.nsf/valuta-hist.xml")
</script>
</head>
<body>
Dato
<script>
var dates = xmlDoc.selectNodes('//cube/cube');
for (var i = 0 ; i < dates.length && i < 2; i++) {
  document.write(dates[i].getAttribute("time"))
}

</script>
</body>
</html>

på denne måde undgår du fejl hvis der kun er 1 cube! og du kan nemt ændre 2 til fx 4
Avatar billede micbett Nybegynder
24. juni 2004 - 13:41 #12
Det virker bedst for mig hvis jeg retter således ('//Cube/Cube[@time]')i din første kommentar for idag.
Tak for hjælpen endnu engang.

nyt opfølgende spg.se http://www.eksperten.dk/spm/513403
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
Kurser inden for grundlæggende programmering

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