Bonjour à tous,
J'ai recherché d'abord sur le forum si il n'y avait pas de sujet équivalent et j'ai trouvé, celui là: Lien 1
et celui là:Lien 2
Mais celà ne correspond pas exactement a ce que je veux car c'est le cas des regroupements.

Voilà je vous expose mon probleme,j'ai un fichier XML du genre:


<?xml version="1.0" encoding="UTF-8"?><tmx version="1.0"><header creationtoolversion=".." datatype="text" segtype="sentence" adminlang="EN-US" srclang="en" o-tmf="unknow" creationtool=".."></header>
<body>
<tu> 
<tuv xml:lang="en"><prop type="data:type"> source </prop><prop type="ID">0:Title</prop>
<seg>English sentence 1</seg>
</tuv>
<tuv xml:lang="fr"><prop type="data:type"> source </prop><prop type="ID">0:Title</prop>
<seg>Phrase Francaise 1</seg>
</tuv></tu>
<tu> 
<tuv xml:lang="en"><prop type="data:type"> source </prop><prop type="ID">1:Title</prop>
<seg>English sentence 2</seg>
</tuv>
<tuv xml:lang="fr"><prop type="data:type"> source </prop><prop type="ID">1:Title</prop>
<seg>Phrase Francaise 2</seg>
</tuv></tu>
</body></tmx>


En un fichier XML comme celà:

<?xml version="1.0" encoding="UTF-8"?>
<rows>
	<row id="0">
		<cell xml:lang="en"><![CDATA[English sentence 1]]></cell>
		<cell xml:lang="fr"><![CDATA[Phrase Francaise 1]]></cell>
		</row>
	<row  id="1">
		<cell xml:lang="en"><![CDATA[English sentence 2]]></cell>
		<cell xml:lang="fr"><![CDATA[Phrase Francaise 2]]></cell>
		</row>
</rows>


Les <![CDATA[..]]> , c'est pour pouvoir lire les effets visuels mais ce n'est pas tres important pour l'instant.

Donc voilà,j'ai lu sur le forum qu'il me faudrait utiliser un fichier XSL mais je n'ai pas compris comment celà fonctionne,en effet je n'ai jamais vérifier ou modifier un fichier XML avec un fichier XSL,on peut le faire en PHP (supportées par easy php..ou faut-il le faire en java ou en javascript?)...
En fait moi pour l'instant je recupere un fichier au 1er format que je dois modifier (transformer dans le format 2) pour qu'il soit lisible dans une grille,voila.

En fait je suis un peu perdu,je ne sais pas trop ou chercher et ce qui existe dans ce domaine...donc toute aide (meme partielle serai la bienvenue Smiley biggrin )
Merci d'avance
Modifié par titoff85 (06 Aug 2007 - 12:58)
t'as un certain nombre de méthodes qui existent en fait.

Tu peux en effet faire un fichier xsl et faire une transfo (en PHP, Java et surement mm Javascript (ca fait lgtps que j'ai pas fait de coté client)).

Le XSL c pas trop chiant a mettre en place (en php) (fr.php.net/xsl t'as un exemple simple) et grosso modo tu défini des regles en disant "qd je trouve ca dans le document source, alors je mets ca et je copie ca dans le document destination".

Une autre méthode plus barbare serait de récuperer les infos de ton premier fichier de les stocker en mémoire (dans un tableau ou autre) et d'ecrire le fichier sortie en parcourant ton tableau.



Bon courage
Tom
Bonjour tout le monde,
Merci pour vos reponses!!
Je me suis lance dans la creation d'un fichier xsl,mais j'ai un soucis avec easy php 2.0 beta 1 ou wamp5 (la derniere version),lorsque je lance mon fichier php pour faire la modification ,j'ai:
Fatal error: Call to undefined function xslt_create() in .....
Pourtant j'ai active l'extensions xsl et c'est bien present dans mon phpinfo()
Voila,j'ai chercher un peu partout et je comprends pas pourquoi ca marche pas.
bonjour,

je me permet un petit conseil : avant de vouloir utilise des script php pour faire tourner tes transformations de fichier xml , fait d'abord quelques test directement avec ton navigateur préféré (tu as de la chance les 3 principaux ont un processeur Xslt et donc les transformeront automatiquement)

il te suffit pour cela de créer un répertoire dans ton dossier serveur racine (wamp si je me rappelle bien ou www pour Apache ...) et de mettre ton fichier Xml et Xslt (extension xsl est ok également) dans ce même répertoire et de visualiser le fichier xml ( ne pas oublier de lui indiquer le nom du fichier xslt qui s'occupe de la transformation) .

Quand tu auras compris les bases Xslt , alors tu pourras utiliser un fichier php qui appelera ces fichiers et leur demandera d'effectuer ces transformations.
PHP ne s'occupe que de dire : prend ce fichier et celui là , crée un objet XSLT Processor, et les DOMDocument et donne moi le résultat de la transformation ...

Alors pour les apprendre les bases rient ne vaut quelques exercices et un tutorial
comme ceux de developpez.com , mais il en existe beaucoup d'autre

tu peux approfondir en utilisant un processeur Xslt sur ton PC avec par exemple Xalan et lancer tes traitements en ligne de commande (pour bien voir comment fonctionne un tel processeur ) ,

et enfin un petit tour, lorsque tu auras bien saisi les méchanismes xml:xslt, par
l'extension PHP ....

...et le bonheur tu connaîtra ! Smiley cligne
Modifié par kzone (02 Aug 2007 - 11:17)
Bonjour à tous!!
Tout d'abord merci encore de vos réponses!!

Bon alors j'ai pas mal avancer et je suis pret du but mais...il me reste encore quelques problemes...

Vous avez mon fichier xml de départ,je mets maintenant mon fichier 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="xml"
  encoding="UTF-8"
  indent="yes" />
  
<xsl:template match="body">
  
	<rows>
      <xsl:apply-templates select="tu" />
	</rows>
  
</xsl:template>

<xsl:template match="tu">
<xsl:param name="a" select="0" />
  <row id="0">
      <xsl:apply-templates select="tuv" />
  </row>
</xsl:template>

<xsl:template match="tuv">
<xsl:variable name="xml:lang"><xsl:value-of select="@xml:lang" /></xsl:variable>
	<cell xml:lang='$xml:lang'>
    <!--<xsl:value-of select="@xml:lang" />-->
    <!--<xsl:apply-templates select="prop" />-->
	<xsl:apply-templates select="seg" />
    </cell>	
</xsl:template>

<xsl:template match="prop">
  <!--<xsl:if test="type='ID'">-->
  
    <xsl:value-of select="." />
  <!--</xsl:if>-->
</xsl:template>

<xsl:template match="seg">
    <xsl:value-of select="." />
</xsl:template>

</xsl:stylesheet>


Et donc ce fichier xsl me creer (avec une fonction php),un fichier xml comme celà:


<?xml version="1.0" encoding="UTF-8"?>

<rows>
  <row id="0">
    <cell xml:lang="$xml:lang">English sentence 1</cell>
    <cell xml:lang="$xml:lang">Phrase Francaise 1</cell>
  </row>
  <row id="0">
    <cell xml:lang="$xml:lang">English sentence 2</cell>

    <cell xml:lang="$xml:lang">Phrase Francaise 2</cell>
  </row>
</rows>



Ce qui est proche de ce que je veux mais j'ai deux petit probleme:
Il faudrait que j'arrive à incrémenter mon "id",car la je l'ai mis à 0 pour avoir l'idée mais je n'arrive pas à l'incrémenter et ensuite meme genre de probleme,j'ai essayer de définir une variable xml:lang mais lorsque je veux insérer la variable dans mon fichier,elle n'est pas prise comme une variable mais une chaine de caractere...
Voilà je vais continuer à rechercher mais si quelqu'un savait comment faire directement ca m'aiderait grandement.

Ensuite pour répondre à kzone,je ne savais pas que je pouvais tester directement rien qu'avec le naviguateur,par contre moi je veux creer un nouveau fichier xml qui se base sur le premier fichier xml et qui a la structure définit dans le fichier xsl,comment est-ce que je fais?Car je ne vois pas comment indiquer le nom du fichier xslt qui s'occupe de la transformation dans un fichier qui n'existe pas encore..ou sinon je peux le faire dans le fichier xml existant et ca me le changera mais pareil,peut-tu me dire comment faire pour indiquer le nom du fichier xslt qui s'occupe de la transformation?

Voilà,merci d'vance de vos réponses et @ bientot
Bon alors j'ai encore avancé,il me reste maintenant plus qu'un probleme:
L'incrémentation de mon id....j'ai vu que l'on ne pouvais pas changer la valeur des variables en XSL mais il doit bien y avoir un moyen d'incrémenter mon id non?

Je vous donne mon fichier 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="xml"
  encoding="UTF-8"
  indent="yes" />
  
<xsl:template match="body">
  
	<rows>
      <xsl:apply-templates select="tu" />
	</rows>
  
</xsl:template>

<xsl:template match="tu">
	
	<xsl:variable name="id" select="1"/>
	<row id='{$id}'>
	<xsl:apply-templates select="seg" />
	</row>
	
</xsl:template>

<xsl:template match="tuv">
	<xsl:variable name="lang" select="@xml:lang"/>
	<cell xml:lang='{$lang}'>
	<xsl:apply-templates select="seg" />
    </cell>	
</xsl:template>

<xsl:template match="prop">
  <!--<xsl:if test="type='ID'">-->
  
    <xsl:value-of select="." />
  <!--</xsl:if>-->
</xsl:template>

<xsl:template match="seg">
    <xsl:value-of select="." />
</xsl:template>

</xsl:stylesheet>


et maintenant mon fichier XML de sortie:


<?xml version="1.0" encoding="UTF-8"?>
 
 
 
<rows>
 
  <row id="0">
 
    <cell xml:lang="en">English sentence 1</cell>
 
    <cell xml:lang="fr">Phrase Francaise 1</cell>
 
  </row>
 
  <row id="0">
 
    <cell xml:lang="en">English sentence 2</cell>
 
    <cell xml:lang="fr">Phrase Francaise 2</cell>
 
  </row>
 
</rows>
 

Voilà,j'ai cherché des réponses mais à chaque fois que j'essaye un truc ca ne marche pas...
Merci pour votre aide
Est-ce que la fonction position() ou bien count() ne pourrait t'aider dans ce cas !??
position te donnant un numero incréménté pour chaque nouvel position de ton tableau ...
Enfin j'ai pas le temps de tester voir si je dis pas n'importe quoi Smiley rolleyes alors ..
C'est bon ca marche maintenant!!

Je vais mettre le post en [RESOLU],maintenant je n'ai plus qu'a essayer de m'occuper des tags <![CDATA[..]]> car je crois qu'on peut les gérer avec XSL?Je vous ferai signe si j'ai besoin d'aide.

Je mets donc mon fichier XSL final ici si ca peut servir à quelqu'un:


<?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"
  encoding="UTF-8"
  indent="yes" />
  
<xsl:template match="body">  
<rows>  
<xsl:for-each select="tu">  
<row id='{position()-1}'>  
<xsl:apply-templates select="tuv" />  
</row>  
</xsl:for-each>  
</rows>  
</xsl:template>

<xsl:template match="tuv">
	<xsl:variable name="lang" select="@xml:lang"/>
	<cell xml:lang='{$lang}'>
	<xsl:apply-templates select="seg" />
    </cell>	
</xsl:template>

<xsl:template match="prop">
  <xsl:value-of select="." />
</xsl:template>

<xsl:template match="seg">
    <xsl:value-of select="." />
</xsl:template>

</xsl:stylesheet>


et le fichier XML de sortie:


<?xml version="1.0" encoding="UTF-8"?>
 
 
 
<rows>
 
  <row id="0">
 
    <cell xml:lang="en">English sentence 1</cell>
 
    <cell xml:lang="fr">Phrase Francaise 1</cell>
 
  </row>
 
  <row id="1">
 
    <cell xml:lang="en">English sentence 2</cell>
 
    <cell xml:lang="fr">Phrase Francaise 2</cell>
 
  </row>
 
</rows>


Voilà,Merci beaucoup et bonne journée