Nieuw lid |
|
Ik heb een XML-bestand waarin data mbt een aantal productgroepen staat, zoals DVD's en games. Op dit XML-bestand pas ik XSL-templates toe door aan de server-side met behulp van PHP de standaard PHP XSL-processor toe te passen. Zie code:
<?php
$xslDoc = new DOMDocument();
$xslDoc->load("XSLbestand.xsl");
$xmlDoc = new DOMDocument();
$xmlDoc->load("XMLbestand.xml");
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
echo $proc->transformToXML($xmlDoc);
?>
<?php $xslDoc = new DOMDocument(); $xslDoc->load("XSLbestand.xsl"); $xmlDoc = new DOMDocument(); $xmlDoc->load("XMLbestand.xml"); $proc = new XSLTProcessor(); $proc->importStylesheet($xslDoc); echo $proc->transformToXML($xmlDoc); ?>
Nu werkt dit allemaal goed op 1 ding na. Alle data uit het XML bestand wordt nu getoond op het scherm.
Ik wil juist alleen bepaalde data op het scherm tonen welke zich tussen bepaalde XML-tags bevindt.
De bedoeling is bijvoorbeeld dat op een bepaalde pagina op de website alleen data mbt de DVD's wordt getoond, dus alleen producten welke tussen de <DVD> en </DVD> tags staan. Wat er nu gebeurt is dat alle data uit het XML bestand wordt getoond, ook alles dat tussen <GAMES> tags staat en dat is juist niet de bedoeling.
Ik weet dus alleen niet hoe ik dat moet doen met XSL (of PHP). (De XSL styling moet dus wel blijven werken op de gekozen data uit het XML-bestand.)
Iemand kwam met de volgende suggestie: "Onderdruk de XML elementen die je niet ge-output wil zien met een nieuwe lege XSL template".
<xsl:template match="specifiekElement"></xsl:template>
<xsl:template match="specifiekElement"></xsl:template>
Het bovenstaande lijkt me alleen handig in zeer specifieke gevallen, maar niet in mijn geval, want op de ene pagina wil ik een bepaald element wel tonen en op een andere pagina niet. Als ik een element permanent zou onderdrukken op de bovenstaande manier, dan heb ik die flexibiliteit namelijk niet om het XML element te tonen wanneer ik wil.
Een PHP oplossing zoals het volgende zou het ook kunnen laten werken, alleen is het volgende stukje code mijn eigen verzinsel en werkt het niet:
<?php
//Echo alleen alles tussen de DVD-tags
echo $proc->transformToXML($xmlDoc->root[0]->dvd);
//Het bovenstaande stukje code geeft de volgende error:
//Warning: XSLTProcessor::transformToXml() expects parameter 1 to be object, null given
?>
<?php //Echo alleen alles tussen de DVD-tags echo $proc->transformToXML($xmlDoc->root[0]->dvd); //Het bovenstaande stukje code geeft de volgende error: //Warning: XSLTProcessor::transformToXml() expects parameter 1 to be object, null given ?>
Een andere oplossing is een X-Path expressie loslaten op het geladen XML bestand, echter de x-path functie werkt alleen op een SimpleXML object vermoed ik.
|