activiteiten uit xml bestand op homepage
Het xml bestand is als volgt opgebouwd:
<month value="4">
<day value="14">
<label>Rommelmarkt Lemmer Museumweekend</label>
<description>Rommelmarkt Plaats: Lemmer; Riensingel 4 Tijd: 10.00-15.00</description>
</day>
</month>
etc...
Gewijzigd op 28/10/2012 22:46:06 door Sander Zijnstra
SimpleXml om het bestand uit te lezen. Maak een kleine functie die ze sorteert, bij voorkeur een algoritme om tijd te besparen, en een functie die dan de eerste 3 pakt.
Gebruik <!DOCTYPE html>
<html>
<body>
<div>
<!-- tussen de spans hieronder wordt de tekst uit het xml-bestand weergegeven. -->
<span id="month_span"><!-- month --></span><br>
<span id="label_span"><!-- label --></span><br>
</div>
<script>
// functie voor het ophalen van een xml-bestand.
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","note.xml",false);
xmlhttp.send();
// het xml-bestand wordt opgeslagen in xmlDoc.
xmlDoc=xmlhttp.responseXML;
// zet de "value" attribute van de <month> tag in het element met id "month_span"
// verander [0] naar [1] om de tweede <month> tag in te lezen enzovoorts
document.getElementById("month_span").innerHTML=
xmlDoc.getElementsByTagName("month")[0].getAttribute("value");
// zet de eerste <label> tag in het element met id "label_span"
// verander [0] naar [1] om de tweede <label> tag in te lezen enzovoorts
document.getElementById("label_span").innerHTML=
xmlDoc.getElementsByTagName("label")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
Top ga hier morgen mee aan de slag, thnx
Ik denk dat het voor de TS geen probleem is, maar ik wou het toch even kwijt.
Kan ik ergens in normale taal mijn kennis hierover uitbreiden?
// verander [0] naar [1] om de tweede <month> tag in te lezen enzovoorts
is er een manier om dit automatisch elke dag 1 punt op te laten tellen?
<month> kan ik elke maand wel veranderen eventueel maar met dagen zou het toch wel prettig zijn.
Waarom gebruik je daar XML voor, een databse werkt toch veel gemakkelijker?
@Ger een database is soms te veel, voor kleine scripts heb je niet per se een database nodig.
Koen, het gaat niet om hoe groot het script is, maar om de informatie waarmee het moet werken. Databases zijn over het algemeen veel beter beheersbaar, onderzoekbaar enz.
Sander Zijnstra op 30/10/2012 00:12:38:
is er een manier om dit automatisch elke dag 1 punt op te laten tellen?
is er een manier om dit automatisch elke dag 1 punt op te laten tellen?
Jazeker je bedoelt op 1 november dan alleen [1] en op 2 november [1] en [2] enzovoort?
Gewijzigd op 30/10/2012 08:38:43 door Frank Nietbelangrijk
Ja klopt dat bedoel ik. Maanden zou evt ook handig zijn, maar laten we in eerste instantie van dagen uitgaan. Ik realiseer me dat een database handiger is, maar gezoen mijn kennis daarover en de grootte van de kalender gaat er dan nog erg veel tijd inzitten.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!DOCTYPE html>
<html>
<body>
<div>
<script>
// functie voor het ophalen van een xml-bestand.
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","note.xml",false);
xmlhttp.send();
// het xml-bestand wordt opgeslagen in xmlDoc.
xmlDoc=xmlhttp.responseXML;
var datum = new Date(); //datum van vandaag
var dagen = datum.getDate(); // dag van de maand
var arr = xmlDoc.getElementsByTagName("day"); // sla alle elementen met een <day> tag op in een array
// deze functie probeert een string te pakken die tussen de tags staan zoals <label>rommelmarkt</label>
function getTagContent(element, tag) {
var arr = element.getElementsByTagName(tag);
if(arr.length)
return arr[0].childNodes[0].nodeValue;
return '-niet gevonden-';
}
// loop om alle dagen van deze maand door te lopen tot en met vandaag
for(var dag = 1; dag <= dagen ; dag++ ) {
document.write('dag: ' + dag + '</br>'); // print de dag
for(var j = 0; j < arr.length ; j++ ) { // loop die door alle <day>-tag elementen loopt
if(arr[j].getAttribute("value") == dag) { // als <day value="X"> gelijk is aan de dag die we zoeken
document.write('label: ' + getTagContent(arr[j], 'label')+'</br>'); //print de label
document.write('description: ' + getTagContent(arr[j], 'description')+'</br>'); // print de beschrijving
}
}
}
</script>
</div>
</body>
</html>
<html>
<body>
<div>
<script>
// functie voor het ophalen van een xml-bestand.
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","note.xml",false);
xmlhttp.send();
// het xml-bestand wordt opgeslagen in xmlDoc.
xmlDoc=xmlhttp.responseXML;
var datum = new Date(); //datum van vandaag
var dagen = datum.getDate(); // dag van de maand
var arr = xmlDoc.getElementsByTagName("day"); // sla alle elementen met een <day> tag op in een array
// deze functie probeert een string te pakken die tussen de tags staan zoals <label>rommelmarkt</label>
function getTagContent(element, tag) {
var arr = element.getElementsByTagName(tag);
if(arr.length)
return arr[0].childNodes[0].nodeValue;
return '-niet gevonden-';
}
// loop om alle dagen van deze maand door te lopen tot en met vandaag
for(var dag = 1; dag <= dagen ; dag++ ) {
document.write('dag: ' + dag + '</br>'); // print de dag
for(var j = 0; j < arr.length ; j++ ) { // loop die door alle <day>-tag elementen loopt
if(arr[j].getAttribute("value") == dag) { // als <day value="X"> gelijk is aan de dag die we zoeken
document.write('label: ' + getTagContent(arr[j], 'label')+'</br>'); //print de label
document.write('description: ' + getTagContent(arr[j], 'description')+'</br>'); // print de beschrijving
}
}
}
</script>
</div>
</body>
</html>
Goed hier loopt ie dan door de dagen. Begrijp goed dat getElementsByTagName('day') een array geeft met alle <day> elementen, meestal meer dan één dus.
Gewijzigd op 30/10/2012 19:29:46 door Frank Nietbelangrijk