objectif : parser un fichier xml, récupérer les valeurs afin de les insérer dans une base de données mysql :
fichier source xml avec des records du type :
La feuille de style associé est la suivante :
Le problème que je n'arrive pas à résoudre c'est que la valeur du champ AUTHORS est reproduite 2 fois (redondance) :
"Fortino Sabine bigoudiFortino Sabine; bigoudi"
alors que l'objectif est de ne récupérer que la valeur "Fortino Sabine;bigoudi" le point virgue (;) étant le séparateur des 2 valeurs de l'attribut auteur.
voilà est-ce clair? : en parcourant la liste je n'ai pas trouvé non plus la solution àmlon problème, c'est pourquoi je me suis résolu à en faire état désireux de sortir de l'impasse dans laquelle je patauge depuis quelque temps
adresse pour constater l'effet du script actuel :
http://publications.u-paris10.fr/seb2.xml
merci d'avance
Modifié par roro2005 (05 Nov 2005 - 19:59)
fichier source xml avec des records du type :
<XML>
<RECORDS>
<RECORD>
<REFERENCE_TYPE>0</REFERENCE_TYPE>
<REFNUM>1</REFNUM>
<AUTHORS>
<AUTHOR>Fortino, S. trad</AUTHOR>
<AUTHOR>bigoudi</AUTHOR>
</AUTHORS>
<YEAR>1993</YEAR>
<TITLE>Mexique : des femmes partie prenante du mouvement social</TITLE>
<SECONDARY_TITLE>Cahiers du Feminisme</SECONDARY_TITLE>
<CUSTOM4>T & M</CUSTOM4>
<ABSTRACT>Deux experiences sont relatees : la creation de la Maison de la femme "Rosario Castellanos" a Oaxaca qui a pour but d'offrir un soutien aux femmes et d'impulser des groupes de prise de conscience ; la creation de la COCODEM (Commission de coordination pour le developpement de la femme) au sein des syndicats enseignants pour faire prendre en compte les inegalites de genre par les instances syndicales</ABSTRACT>
<NOTES>Using Smart Source Parsing 1994; (67-68) 38-42 ill French</NOTES>
</RECORD>
...
</RECORDS>
La feuille de style associé est la suivante :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:for-each select="RECORDS/RECORD">
insert into category(<xsl:for-each select="*">
<xsl:value-of select="name()" />
<xsl:if test="position() != count(../*)">,</xsl:if>
</xsl:for-each>)
values ( <xsl:for-each select="*">
<xsl:if test="not(number(.) or (number(.)=0))">"</xsl:if>
<xsl:value-of select="normalize-space(.)" />
<xsl:for-each select="./AUTHOR">
<xsl:value-of select="." />
<xsl:if test="position() !=last()">
<xsl:if test="position() != count(../*)">;</xsl:if>
</xsl:if>
</xsl:for-each>
<xsl:if test="position() = count(../*)" />
<xsl:if test="not(number(.) or (number(.)=0))">"</xsl:if>
<xsl:if test="position() != count(../*)">,</xsl:if>
</xsl:for-each>)
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Le problème que je n'arrive pas à résoudre c'est que la valeur du champ AUTHORS est reproduite 2 fois (redondance) :
"Fortino Sabine bigoudiFortino Sabine; bigoudi"
alors que l'objectif est de ne récupérer que la valeur "Fortino Sabine;bigoudi" le point virgue (;) étant le séparateur des 2 valeurs de l'attribut auteur.
voilà est-ce clair? : en parcourant la liste je n'ai pas trouvé non plus la solution àmlon problème, c'est pourquoi je me suis résolu à en faire état désireux de sortir de l'impasse dans laquelle je patauge depuis quelque temps
adresse pour constater l'effet du script actuel :
http://publications.u-paris10.fr/seb2.xml
merci d'avance
Modifié par roro2005 (05 Nov 2005 - 19:59)