Page 1 sur 1

transformation de 2 fichier xml en 1 seul

Posté : 06 août 2009, 11:29
par knebhi
Bonjour,

j'ai actuellement des fichiers xml au norme TEI :
- l'un contient le header
- l'autre le body

en effet, j'ai construit le header d'un coté et le body de l'autre mais chaque nom de fichier permet de savoir comment les associer.

mon soucis est de vouloir les concaténer en quelque sorte pour n'obtenir qu'un seul et même fichier.
donc prendre le header X d'un coté et le body Y de l'autre pour faire un fichier Z qui rassemblera les deux.

voici la facon dont sont formé mes fichiers :

fichier1_header.xml

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <TEI xmlns="http://www.tei-c.org/ns/1.0"> <teiHeader> <!-- ensemble des balises du header à conserver --> </teiHeader> <facsimile> <audio url="NOMFICHIERSON"/> </facsimile> <text> <body> <p/> </body> </text> </TEI>
dans ce fichier j'aimerai ne garder que le teiHeader et les infos qui y sont contenu

voici le body
fichier1_body.xml

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <TEI xmlns="http://www.tei-c.org/ns/1.0"> <teiHeader> <!-- header généré automatiquement pour avoir un fichier bien formé --> </teiHeader> <facsimile> <audio url="NOMFICHIERSON"/> </facsimile> <text> <body> <div type="report"> <!-- ensemble des balises du body à conserver --> </div> </body> </text> </TEI>
mes fichiers ont le même nom en fait (j'ai changé pour etre plus clair)
une catégorie de fichiers est rangé dans un répertoire header et l'autre un repertoire body

j'aimerai savoir quelle solution vous me conseiller et qui serait la plus simple si vous avez compri ma problématique.

merci

Re: transformation de 2 fichier xml en 1 seul

Posté : 06 août 2009, 12:51
par mojorisin
Bonjour,
orientez vous du coté de xslt, outils idéal pour la manipulation de données xml.

Re: transformation de 2 fichier xml en 1 seul

Posté : 06 août 2009, 17:20
par knebhi
bingo cetait pas si compliqué en xsl
je met la solution meme si c'est un forum php

Code : Tout sélectionner

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0" exclude-result-prefixes="tei"> <xsl:output encoding="UTF-8" method="xml" indent="yes"/> <!--<xsl:template match="/"> <xsl:copy-of select="tei:TEI/tei:teiHeader"/> <xsl:copy-of select="tei:TEI/tei:facsimile"/> </xsl:template>--> <xsl:template match="/"> <xsl:copy> <TEI xmlns="http://www.tei-c.org/ns/1.0"> <!-- on copie les element teiheader et facsimile a partir du file 1--> <xsl:copy-of select="tei:TEI/tei:teiHeader"/> <xsl:copy-of select="tei:TEI/tei:facsimile"/> <!-- on copie le body du file 2--> <xsl:copy-of select="document('2.xml')/tei:TEI/tei:text/tei:body"/> </TEI> </xsl:copy> </xsl:template> </xsl:stylesheet>
on prend le doc 1 en entrée et le doc 2 sera appelé dans le xslt
on génére ensuite la sortie que l'on veut qui sera le fichier entier.

je cherche maintenant la moulinette qui va faire cela sur mes 300fichiers xml decoupé en 2. sachant que chaque fichier porte le meme nom

ex : header/file1.xml et body/file1.xml va donner file1_all.xml

si quelqu'un a une idée je sui preneur j'imaginai déja un script perl mais peut etre que le php peut convenir.

merci

Re: transformation de 2 fichier xml en 1 seul

Posté : 06 août 2009, 17:39
par Victor BRITO
je cherche maintenant la moulinette qui va faire cela sur mes 300fichiers xml decoupé en 2. sachant que chaque fichier porte le meme nom

ex : header/file1.xml et body/file1.xml va donner file1_all.xml

si quelqu'un a une idée je sui preneur j'imaginai déja un script perl mais peut etre que le php peut convenir.
Pas besoin de Perl, puisque PHP convient, grâce la classe XSLTProcessor de l'extension XSL de PHP 5.

Re: transformation de 2 fichier xml en 1 seul

Posté : 07 août 2009, 14:37
par knebhi
Pas besoin de Perl, puisque PHP convient, grâce la classe XSLTProcessor de l'extension XSL de PHP 5.
Alors j'ai installé l'extension xsl dans php.

cependant je me questionne sur une chose... j'arrive bien à faire la transformation mais pour appliquer cela sur mes répertoire j'ai un peu de mal.

en effet, jai mes deux répertoire : header et body
chaque fichier du repertoire header a son jumeau dans le repertoire body
de ce fait header/1.xml devra etre couplé a body/1.xml
et il formeront un 3éme fichier dans un repertoire Corpus par exemple.

voila pour la structure des fichiers.

mon soucis est au niveau du fichier xslt. en effet dans cette ligne

Code : Tout sélectionner

<xsl:copy-of select="document('body/1.xml')/tei:TEI/tei:text/tei:body"/>

j'appel 1.xml mais pour traiter les fichiers il va falloir que ce soit une variable $file_body

et quand $file_body sera = à $file_header alors jexercerai ce traitement.

ma problématique est donc au niveau de l'interaction de php et xslt
j'ai l'impression que ce sera tres dificile cette histoire

Re: transformation de 2 fichier xml en 1 seul

Posté : 07 août 2009, 15:41
par Victor BRITO
$dom = new DOMDocument ();
$xslt = new XSLTProcessor ();

$dom -> load ('chemin-vers-ton-fichier-xslt.xsl');
$xslt -> importStyleSheet ($dom);

$dom -> load ('chemin-vers-ton-fichier-xml.xml');
echo $xslt -> transformToXML ($dom);
N'hésite pas à parcourir l'ensemble du chapitre XSL du manuel PHP. ;)

Re: transformation de 2 fichier xml en 1 seul

Posté : 08 août 2009, 00:57
par knebhi
N'hésite pas à parcourir l'ensemble du chapitre XSL du manuel PHP. ;)

Merci victor .
en fait j'ai bien lu le manuel php qui parle de xsl et comme je l'ai dit dans mon dernier post j'ai un soucis pour appliquer mon fichier xsl a mes repertoires respectifs.
si tu lis mon dernier post tu comprendra mieux ma problématique jespere.

merci