Waar is mijn tabel?

Status
Niet open voor verdere reacties.

Nico 774

Nieuwe gebruiker
Lid geworden
11 apr 2010
Berichten
3
Hoi

Ik probeer verschillende xsl-stylesheets te koppelen aan een xml-bestand. Hier vond ik een aardige introductie van de manier waarop ik dat het beste kon aanpakken en ik ben daar ook heel ver mee gekomen, maar... in mijn xsl-stylesheet heb ik een tabel gedefinieerd met twee kolommen. Als ik het stylesheet direct koppel in het xml-bestand (met een regel als <?xml-stylesheet type="application/xml" href="Lijst.xsl"?>), dan zie ik beide kolommen in mijn browser. Maar als ik het stylesheet verwerk via een php-bestand, dan zie ik slechts één kolom. Heeft iemand enig idee wat ik daaraan kan doen?

Hieronder de code van het php-bestand:
PHP:
<?php
$doc = new DOMDocument;
$doc->Load('Lijst.xml');
$xpath = new DOMXPath($doc);
$XslFile="Lijst.xsl";
$xsl = new DOMDocument("1.0");
$xsl->load($XslFile);
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
$dom=$proc->transformToDoc( $doc );
echo  "\n\n".$dom->saveXML($dom->documentElement);     
?>
Hieronder de code van het xsl-bestand (Lijst.xsl):
[xml]
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="totaal">
<html>
<head>
<title>Startpagina</title>
</head>
<body>
<h1>Startpagina</h1>
<xsl:for-each select="l"><br/>
<table width="100%">
<tr>
<td valign="top">
<h2>Nieuws</h2>
<xsl:for-each select="r[@class='nieuws']">
<tr>
<td>
<a target="new">
<xsl:attribute name="href">
<xsl:value-of select="."/>
</xsl:attribute>
<xsl:value-of select="@n"/>
</a>
</td>
</tr>
</xsl:for-each>
</td>
<td valign="top">
<h2>Diversen</h2>
<xsl:for-each select="r[@class='diversen']">
<tr>
<td>
<a>
<xsl:attribute name="href">
<xsl:value-of select="."/>
</xsl:attribute>
<xsl:value-of select="@n"/>
</a>
</td>
</tr>
</xsl:for-each>
</td>
</tr>
</table>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

En hier de code van het xml-bestand (Lijst.xml):

<?xml version="1.0"?>

<!-- <?xml-stylesheet type="application/xml" href="Lijst.xsl"?> -->

<totaal>
<l>
<r class="nieuws" n="Trouw">http://www.trouw.nl</r>
<r class="nieuws" n="De Volkskrant">http://www.volkskrant.nl</r>
<r class="nieuws" n="Nu.nl">http://www.nu.nl</r>
<r class="nieuws" n="Teletekst">http://teletekst.nos.nl/?101-01</r>
<r class="nieuws" n="TAZ">http://www.taz.de</r>
<r class="nieuws" n="IP">http://www.informatieprofessional.nl/home/index.php</r>
<r class="diversen" n="Hotmail">http://www.hotmail.nl</r>
<r class="diversen" n="Postbank">http://www.postbank.nl</r>
<r class="diversen" n="OV">http://www.9292ov.nl/</r>
<r class="diversen" n="KNMI">http://www.knmi.nl</r>
<r class="diversen" n="Buienradar">http://www.buienradar.nl</r>
<r class="kennis" n="Wiki Nl">http://nl.wikipedia.org/wiki/Hoofdpagina</r>
<r class="kennis" n="Wiki Eng.">http://en.wikipedia.org/wiki/Main_Page</r>
<r class="kennis" n="Google">http://www.google.nl</r>
</l>
</totaal>
[/xml]
 
Laatst bewerkt door een moderator:
Zou het er niet zo uitzien
Voor pdf en doc .. moet je Fo scripting gebruiken

als je xml direct wil tone kan je ook html laten genereren maar enkel door de browser te openen
Meer vindt u op www.djdb.be/webstart/lib/lieven.jar Niet op letten het is een javaprojectje maar daarin zal je vinden een xml en en complementaire xsl die kan je alvast gebruiken op je php script te testen en wat commands uit vissen en weet je direct ook dat er een digitaal cv formaat bestaat in xml
PHP:
<xsl:template match="/">
- <fo:root>
- <fo:layout-master-set>
- <fo:simple-page-master master-name="Main" page-height="29.7cm" page-width="26cm" margin-top="1.7cm" margin-bottom="1.28cm" margin-left="2cm" margin-right="2cm">
  <fo:region-body /> 
  </fo:simple-page-master>
  </fo:layout-master-set>
- <fo:page-sequence master-reference="Main">
- <fo:flow flow-name="xsl-region-body">
  <fo:block /> 
  <xsl:apply-templates select="europass:learnerinfo" /> 
  </fo:flow>
  </fo:page-sequence>
  </fo:root>
  </xsl:template>
 
Hoi Kenikavanbis. Dank voor je antwoord, maar... ik was niet op zoek naar het schrijven van gegevens naar bv pdf. (Het linkje werkt trouwens niet.) Wat ik zocht was veel eenvoudiger - misschien wel onvoorstelbaar eenvoudig.

Ik heb zelf nog wat zitten rommelen, onder andere omdat het me was opgevallen dat de structuur van die tabel (de koppen) gewoon tevoorschijn komt als bijv. de attributen waarop in het xsl wordt geselecteerd niet aansluiten op het xml-bestand. Het is net alsof alle data die via het xsl wordt opgehaald automatisch links wordt weergegeven, buiten elke tabel in het xsl om. Dat bracht me op de gedachte dat ik de tabel in het php-bestand moest onderbrengen. Dat komt er nu als volgt uit te zien:

PHP:
<html>
<table width="100%">
<tr>
<td valign="top">

<?php
$doc = new DOMDocument;
$doc->Load('Lijst.xml');
$xpath = new DOMXPath($doc);
$XslFile="Lijst.xsl";
$xsl = new DOMDocument("1.0");
$xsl->load($XslFile);
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
$dom=$proc->transformToDoc( $doc );
echo  "".$dom->saveXML($dom->documentElement);     
?>

</td>
<td>

<?php
$doc = new DOMDocument;
$doc->Load('Lijst.xml');
$xpath = new DOMXPath($doc);
$XslFile="Lijst2.xsl";
$xsl = new DOMDocument("1.0");
$xsl->load($XslFile);
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
$dom=$proc->transformToDoc( $doc );
echo  "".$dom->saveXML($dom->documentElement);     
?>

</td>
</tr>
</table>
</html>

Hier horen twee xsl-bestanden bij, waarvan de eerste (lijst.xsl) er als volgt uitziet:

[XML]
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="totaal">

<html>
<body>

<table width="100%">
<xsl:for-each select="l"><br/>
<tr>
<td valign="top">
<h2>Nieuws</h2>
<xsl:for-each select="r[@class='nieuws']">
<tr>
<td>
<a target="new">
<xsl:attribute name="href">
<xsl:value-of select="."/>
</xsl:attribute>
<xsl:value-of select="@n"/>
</a>
</td>
</tr>
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
</table>

</body>
</html>

</xsl:template>
</xsl:stylesheet>
[/XML]

Het andere xsl-bestand (lijst2.xsl) is identiek, afgezien van het vervangen van "nieuws" voor "div". De bestanden kunnen misschien nog simpeler, maar dat heb ik nog niet uitgeprobeerd.

Ik kan me voorstellen dat hier (een deel van) de kracht van PHP zichtbaar wordt: het opnemen van stukken code die in aparte bestanden zijn ondergebracht. Voor mij is het nog erg nieuw en bovenstaande ziet er misschien erg omslachtig uit, maar ik vind dit echt heel erg gaaf.
 
Laatst bewerkt:
Het hoeft niet te werken jar is als een zip bestand
Als je toch een xsl moet schrijven moet je vooral naar template kijken dan zal deze sneller en kleiner zijn en bijgevolg beter onder houdbaar
Als java kent en iets beter kijk ben ik bijna op het punt een automatische omzetter te bouwen. maar dat ter zijde gelaten hier een vb template
PHP:
<!-- cv_fo_nl_NL.xsl  -->
<xsl:template name="selfassessmentlevel">
  <xsl:param name="element" /> 
- <fo:table-cell padding="0cm">
- <xsl:element name="fo:block" use-attribute-sets="t_innercel_center">
  <xsl:value-of select="$element" /> 
  </xsl:element>
  </fo:table-cell>
- <fo:table-cell padding="0cm">
- <xsl:element name="fo:block" use-attribute-sets="t_innercel_center">
  <xsl:if test="$element='a1'">Basisgebruiker</xsl:if> 
  <xsl:if test="$element='b1'">Onafhankelijke gebruiker</xsl:if> 
  <xsl:if test="$element='c1'">Vaardige gebruiker</xsl:if> 
  <xsl:if test="$element='a2'">Basisgebruiker</xsl:if> 
  <xsl:if test="$element='b2'">Onafhankelijke gebruiker</xsl:if> 
  <xsl:if test="$element='c2'">Vaardige gebruiker</xsl:if> 
  </xsl:element>
  </fo:table-cell>
  </xsl:template>
en de aanroeping van de template
PHP:
- <xsl:for-each select="languagelist/language[@type='foreign']">
- <xsl:variable name="indexedLang">
  <xsl:value-of select="concat('step5.foreignLanguageList[', position()-1, ']')" /> 
  </xsl:variable>
- <xsl:if test="//field[@name=$indexedLang and @keep='true']">
- <fo:table-row>
- <xsl:call-template name="selfassessmentlevel">
- <xsl:with-param name="element">
  <xsl:value-of select="level/listening" /> 
  </xsl:with-param>
  </xsl:call-template>

Sorry bijna vergeten moet je toch effe indien je zou gebruiken this.jar zoeken wegsmijten een eigen gecreerde tag
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan