[JS] Ajax, XSL.replaceNode(HTMLNode, XSLNode):type mismatch

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste Tweakers,

Ik ben bezig met het ontwikkelen van een Ajax Engine waarbij gebruik gemaakt wordt van inkomende XML data die vervolgens getransformeerd (browser side) via XSL in de browser weergegeven wordt als XHTML. Hierbij is het de bedoeling dat ik losse componenten kan maken in XSL met daarin eventueel weer subcomponenten die tijdens het laden van het bovenliggende component mee geladen worden. Even een klein voorbeeld van een regel waarmee dit zou moeten kunnen in mijn XSL bestand:

XML:
1
2
    
    <c:tree datasrc="tree.xml">


Nou heb ik het zover voor elkaar gekregen dat er bij het laden van een component gekeken wordt naar sub componenten en dat deze vervolgens aan de XSL van het hoofd component toegevoegd worden. En in Firefox en Opera werkt dit precies zoals ik wil. Bij Internet Explorer en Chrome wil dit echter niet zo makkelijk.

Probleem in Internet Explorer: De IE functie transformNode geeft de XHTML in een string terug. In mijn browser independent functie Component.transform wil ik graag een node terug kunnen geven die ik kan appenden aan een HTML node. Dit wilde ik oplossen door:

JavaScript:
1
2
3
    var element = document.createElement( "SPAN" );
    element.innerHTML = XMLDocument.transformNode( this.XSLDocument );
    return element;


Het probleem is nu echter dat wanneer de node <c:tree datasrc="tree.xml"> in het hoofd component wil vervangen (met replaceNode) door de bovenstaande return value, ik een type mismatch error krijg. Hier kan ik me wel iets bij voorstellen aangezien ik hier een XMLNode wil vervangen door een HTMLNode in een XMLDocument. Firefox en Opera doen hier echter niet moeilijk over maar IE struikelt helaas. Mijn vraag is dus hoe ik dit wel kan doen? Ik heb al geprobeerd:

JavaScript:
1
    var element = this.XSLDocument.createElement( "SPAN" );


Maar vanuit een XML document kan ik kennelijk geen createElement doen? Hoe dan wel?

Probleem in Chrome: eigenlijk hetzelfde probleem als in IE alleen dan komt de return value niet van transformNode maar rechstreeks uit XSLTProcessor.transformToFragment.

Hoe kan ik dit oplossen? En daarnaast gelijk de vraag: Is dit een goede implementatie voor een XSL Component based Ajax Engine, of prefereren jullie een andere aanpak?