XSL unique pour XML différent
"Thibaut Gabelle" <[email protected]> Thu, 5 Apr 2007 14:10:49 +0200
| Newsgroups | gmane.text.xml.french.tech |
|---|---|
| Message-ID | <[email protected]> |
Bonjour,
Voici mon besoin : je veux appliquer une transformation XSLT à des fichiers
XML pouvant avoir une structure différente, (1-n ; 1-n-n ;
) et pour lequel
je ne connais pas le nom des éléments.
Ci-dessous des exemples de XML avec le résultat souhaité en HTML.
Je voudrais savoir si cela est réellement faisable, sachant que je veux
quun seul XSL générique.
Je débute dans ce domaine et pour linstant, les XSL que jarrive à faire ne
répondent pas à tous les cas de figure.
Merci beaucoup.
Exemple de XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<!-- Template colonne -->
<xsl:template name="colonne">
<xsl:if test="count(*) >= 1">
<td>
<table border="1">
<xsl:for-each select="*">
<tr>
<xsl:call-template name="colonne"/>
</tr>
</xsl:for-each>
</table>
</td>
</xsl:if>
<xsl:if test="count(*) = 0">
<td><xsl:value-of select="."/></td>
</xsl:if>
</xsl:template>
<!-- Fin Template colonne -->
<xsl:template match="root">
<table border="1">
<!-- Pour Chaque ligne -->
<xsl:for-each select="*">
<tr>
<!-- Colorer une ligne sur 2 -->
<xsl:if test="(position() mod 2)=0">
<xsl:attribute name="bgcolor">green</xsl:attribute>
</xsl:if>
<!-- Pour chaque colonne -->
<xsl:for-each select="*">
<xsl:call-template name="colonne"/>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Exemple XML 1
<?xml version="1.0" encoding="UTF-8"?>
<root>
<noeud>
<col1>Val 1</col1>
<col2>Val 2</col2>
<col3>Val 3</col3>
</noeud>
<noeud>
<col1>Val 1</col1>
<col2>Val 2</col2>
<col3>Val 3</col3>
<elements>
<element>
<col4>Val 4</col4>
</element>
<element>
<col4>Val 4</col4>
</element>
</elements>
</noeud>
</root>
Résultat HTML 1 souhaité
-------Val1-----Val2-----Val3
-------Val1-----Val2-----Val3-----Val4------
-----------------------------------------Val4------
Exemple XML 2
<?xml version="1.0" encoding="UTF-8"?>
<root>
<noeud1>
<col1>Val1</col1>
<noeud2>
<col2>Val2</col2>
<noeud3>
<col3>Val3</col3>
</noeud3>
<noeud3>
<col3>Val4</col3>
</noeud3>
</noeud2>
</noeud1>
<noeud1>
<col1>Val1</col1>
<noeud2>
<col2>Val2</col2>
<noeud3>
<col3>Val3</col3>
</noeud3>
</noeud2>
</noeud1>
</root>
Résultat HTML 2 souhaité
-------Val1-----Val2-----Val3
------------------------------Val4
-------Val1-----Val2-----Val3
Exemple XML 3
<?xml version="1.0" encoding="UTF-8"?>
<root>
<noeud1>
<col1>Val1</col1>
<noeud2>
<noeud3>
<col2>Val2</col2>
<noeud4>
<noeud5>
<col3>Val3</col3>
</noeud5>
<noeud5>
<col3>Val4</col3>
</noeud5>
</noeud4>
</noeud3>
</noeud2>
</noeud1>
<noeud1>
<col1>Val1</col1>
<noeud2>
<noeud3>
<col2>Val2</col2>
<noeud4>
<noeud5>
<col3>Val3</col3>
</noeud5>
</noeud4>
</noeud3>
</noeud2>
</noeud1>
</root>
Résultat HTML 3 souhaité
-------Val1-----Val2-----Val3
------------------------------Val4
-------Val1-----Val2-----Val3