Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[DOM] HTML-lijst maken van XML-data via Javascript

Anoniem
Stijn.
3 antwoorden
  • Ik heb een JavaScript gemaakt dat uit een XML-bestand (opgeroepen via XMLHttpRequest) met de volgende structuur:

    [code:1:06b55f7db4]<?xml version="1.0">
    <items>
    <item id="1">Inhoud</item>
    <item id="2">Nog meer inhoud</item>
    …etc…
    </items>[/code:1:06b55f7db4]

    een HTML-lijdt (ul, li enzovoorts) hoort te maken. Het probleem is dat ik via de W3C-DOM functies geen data kan uitlezen uit de <item> elementen. Het script ziet wel dat er 17 (in het geval van het voorbeeld dus 2) <item> elementen staan, maar als ik dan vervolgens de inhoud van dat element probeer op te roepen met nodeValue, textNodeValue of zelfs innerHTML wordt er steevast "undefined" gegeven. Het script ziet er als volgt uit:

    [code:1:06b55f7db4]function showOverview(getWhat) {
    http.open('GET', 'xml.php?get=' + getWhat);
    http.onreadystatechange = function() {
    if (http.readyState == 4) {
    if (!http.responseXML) {
    alert('Fout: ' + http.responseText);
    }
    var bigList = document.createElement('ul');
    var li = document.createElement('li');
    var a = document.createElement('a');
    var XML = http.responseXML;
    for (i = 0; i < XML.getElementsByTagName('item').length; i++) {
    var itemData = XML.firstChild.childNodes[i].textNodeValue;
    var itemSub = li.cloneNode(false);
    var itemLink = a.cloneNode(false);
    itemLink.href = 'javascript: getPage('' + itemData + '');';
    itemLink.appendChild(document.createTextNode(itemData));
    itemSub.appendChild(itemLink);
    bigList.appendChild(itemSub);
    }
    site.appendChild(bigList);
    }
    }
    http.send(null);
    }[/code:1:06b55f7db4]
    Voor de volledigheid: "http" is een XmlHttpRequest object, "site" is een verwijzing naar de <div> waarin de lijst moet komen en het XML-bestand heeft als Content-type text/xml. Het script is ietwat versimpeld omdat het anders teveel ruimte zou innemen. Hulp zou ik erg op prijs stellen :)
  • En wat als je <items> opvraagt en vervolgende door de <item> childNodes gaat wandelen? :-?

    Ik heb ook een keer met JavaScript XML-bewerking lopen prutsen, maar omdat destijds de site waarop ik het probeerde niet goed genoeg volgens de XHTML-specificaties geschreven was ben ik voortijdig gestopt. Ik weet wel dat het een hele klus is…

    - Bas
  • Trouwens, nog even terugkijkend naar je vraag wil ik het volgende opmerken:

    Je code is al in staat om te zien hoeveel <item>-elementen je hebt, en al je <item>-elementen hebben een uniek id van "1" t/m het "aantal <item>-elementen". Is het dan niet handig om een loopje te maken en de elementen op te vragen met getElementById()?

    't Is maar een idee, maar als je op deze manier de problematiek van je huidige aanpak kan omzeilen is het het overwegen waard, nietwaar?

    Succes, en laat even weten wat je ervan bakt… ;)

    - Bas

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.