Merci pour le conseil!
Ok on va donc essayé de récapituler simplement:
soit mon XML:
<?xml version="1.0" encoding="UTF-8"?>
<M>Eichstrasse <T Des="ein Text"/>_Rümlang_8152 Glattbrugg {eigene Büros}</M>
Comme un grand malin je me suis dit que je pouvais essayé de faire 2 XSLT pour faire mes transformation!
Un pour transformé ca:
<[#red]T[#black] Des="[#blue]ein Text[#black]"/>
en ca (tout ce qui n'est pas en couleur se transforme génériquement possibilités: T, B, N et D, avec @Des différentes):
<b xmlns="http://www.w3.org/1999/xhtml" title="[#blue]ein Text[#black]" style="" id="[#red]T[#black]">^</b>
et l'autre pour transformer mes _ en <div/>!
Le seul problème est que maintenant j'arrive à faire mes transformation mais une enlève les balises de l'autre!
D'ou ma question comment pourrais-je faire pour que me deux transformation soie soit en un ou deux pas mais quelle ne s'annule pas?
Pour rappel voici les 2 XSLT (Adapté au xml présenté en dessus):
1:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="M">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>
<xsl:template match="B">
<xsl:variable name="nom" select="@id"/>
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name="title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/><xsl:attribute name="id">B</xsl:attribute><xsl:value-of select="."/>^</xsl:element>
</xsl:template>
<xsl:template match="N">
<xsl:variable name="nom" select="@id"/>
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name="title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/><xsl:attribute name="id">N</xsl:attribute><xsl:value-of select="."/>^</xsl:element>
</xsl:template>
<xsl:template match="D">
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name="title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/><xsl:attribute name="id">D</xsl:attribute><xsl:value-of select="."/>^</xsl:element>
</xsl:template>
<xsl:template match="T">
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name="title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/><xsl:attribute name="id">T</xsl:attribute><xsl:value-of select="."/>^</xsl:element>
</xsl:template>
</xsl:stylesheet>
2:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="M">
<xsl:choose>
<xsl:when test="contains(. , '_')">
<xsl:element name="{local-name()}">
<xsl:call-template name="decomposition-chaine">
<xsl:with-param name="chaine" select="."/>
</xsl:call-template>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="decomposition-chaine">
<xsl:param name="chaine"/>
<xsl:value-of select="substring-before($chaine,'_')"/>
<xsl:if test="contains($chaine,'_')">
<div xmlns:xhtml="http://www.w3.org/1999/xhtml"/>
<xsl:call-template name="decomposition-chaine">
<xsl:with-param name="chaine" select="substring-after($chaine , '_')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
J'espère que ce sera un peu plus claire!
Merci infiniment!
Thierry
Modifié par virgul (25 Jan 2006 - 08:32)