Cfm et xml [Résolu]

Signaler
Messages postés
2
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
28 août 2007
-
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010
-
salut, svp comment recuperer des donnés d'un fichier XML avec coldfusion ? et merci d'avance

9 réponses

Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

Bonjour,


une petite recherche sur ce site et hop : http://www.cfmfrance.com/infomsg_RECUPERER-DONNEES-FICHIER-XML_460509.aspx

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
Messages postés
2
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
28 août 2007

merci pour l'aide, j'ai utiliser XmlParse, XmlSearch <cfscript> myxmldoc XmlParse("C:\CFusionMX7\wwwroot\examples\employeesimple.xml"); selectedElements XmlSearch(myxmldoc, "/employee/name/last") ; for (i = 1; i LTE ArrayLen(selectedElements); i = i + 1) writeoutput(selectedElements[i].XmlText & "
"); </cfscript>
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010

Bonjour,

Je programme en coldfusion mais je débute avec le XML.
J'ai réussi à générer un fichier simple, à l'exploiter mais je me bats depuis des heures pour extraire les données d'un fichier un peu plus complexe.
j'ai lu attentivement les messages de ce forum, et d'autres sites, notamment l'excellent http://www.learn-coldfusion-tutorial.com/Xml.cfm mais sans parvenir à faire ce que je voulais faire. J'en appelle donc à vos lumières.
J'ai donc un fichier XML qui a la forme suivante :
<?xml version="1.0" encoding="UTF-8" ?>








Je souhaite en extraire les données pour les afficher et les trier par date. Ca donnerait en sortie :
22/11/2010
12h30 - temp : 20°
16h30 - temp : 20°
23/11/2010
12h30 - temp : 22°
16h30 - temp : 21°

Tout ce que j'ai réussi à faire c'est un tableau avec la fonction Arraynew, ce qui donne :
@temps
1-22/11/2010|12:30:12
2-22/11/2010|16:30:12
3-23/11/2010|12:30:12
4-23/11/2010|16:30:12
@temp
1-20
2-20
3-22
4-21

Si quelqu'un peut m'indiquer un tutorial "XML pour les nuls" ou m'expliquer en quelques mots comment m'en sortir, ce serait super.

Merci d'avance

Stéphanie
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

Bonjour,

a quel niveau bloques-tu?
As-tu déjà un début de code ?

Un peu de documentation !
Et un petit exemple qui devrait te mettre sur la bonne piste !

Nickadele
non, ma belle ne s'appel pas Adèle
Mon Blog
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010

Bonjour,

Merci de te pencher sur mon problème.
Voici mon code.

1er essai :

<cfset xmlDonnees= XMLParse(ExpandPath("datas.xml"))>
<cfoutput>
Date | Heure : #xmlDonnees.points.point.XmlAttributes.temps#

Température de l'air : #xmlDonnees.points.point.XmlAttributes.temp#°C

</cfoutput>
Là je ne sais pas comment boucler sur les données et comment ne sélectionner que les données pour une date donnée. En fait je voufrais faire l'équivalent d'un CFQUERY sur les datas avec un WHERE sur la date. Puis un <CFOUTPUT QUERY>.

Suivant le tutorial cité plus haut, j'ai réussi à extraire les données sous la forme d'un tableau mais ce n'est pas ce que je voulais faire. Ce la donne :

2ème essai :

<cfset xmlDonnees =XMLParse(ExpandPath("datas.xml"))>
<cfoutput>
XPath |
Result |

<cfset arrXPs = ArrayNew(1)>
<cfset ArrayAppend(arrXPs,\"/points/point/@temps\")>
<cfset ArrayAppend(arrXPs,\"/points/point/@temp\")>

<cfloop index=\"i\" from=\"1\" to=\"#ArrayLen(arrXPs)#\">
<cfset xp = arrXPs[i]>
<cfset arrResult = XmlSearch(xmlDonnees,xp)>

----

#xp#,
<ol>
<cfloop index="i" from="1" to="#ArrayLen(arrResult)#">
<li>
<cftry>
#arrResult[i].XmlText#
<cfcatch type="any">#arrResult[i]#</cfcatch>
</cftry>
</li>
</cfloop>
</ol>,

</cfloop>

</cfoutput>

Voilà, où j'en suis...
Merci pour les liens, mais chez moi ils ne fonctionnent pas.

Stéphanie
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

Bonjour,
de tête pour boucler normalement c'est comme ceci :

<cfset xmlDonnees=XMLParse(ExpandPath("datas.xml"))>
<cfloop index="i" from="1" to="xmlDonnees.points.xmlChildren">
<cfoutput>
Date | Heure : #xmlDonnees.points.xmlChildren[i].XmlAttributes.temps#

Température de l'air : #xmlDonnees.points.xmlChildren[i].XmlAttributes.temp#°C

</cfoutput>
</cfloop>

Nickadele
non, ma belle ne s'appel pas Adèle
Mon Blog
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010

Bonjour,

je viens de tenter et voilà l'erreur que j'obtiens :
Attribute validation error for CFLOOP.
The value of the TO attribute is invalid. The value cannot be converted to a numeric because it is not a simple value.Simple values are booleans, numbers, strings, and date-time values.

Alors j'ai rajouté des ## autour de xmlDonnees.points.xmlChildren et là j'ai eu :
The value coldfusion.xml.XmlNodeArray cannot be converted to a number

Je ne trouve pas xmlChildren dans l'aide de CF...

Stéphanie
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010

Par contre quand je fais :
<cfset xmlDonnees=XMLParse(ExpandPath("datas.xml"))>
<cfloop index="i" from="1" to="4">
<cfoutput>
Date | Heure : #xmlDonnees.points.xmlChildren[i].XmlAttributes.temps#

Température de l'air : #xmlDonnees.points.xmlChildren[i].XmlAttributes.temp#°C

</cfoutput>
</cfloop>

J'obtiens :
Date | Heure : 22/11/2010|16:30:12
Température de l'air : 22°C
Date | Heure : 22/11/2010|16:30:12
Température de l'air : 22°C
Date | Heure : 22/11/2010|16:30:12
Température de l'air : 22°C
Date | Heure : 22/11/2010|17:30:12
Température de l'air : 22°C

Il y a bien donc un souci sur le format de xmlDonnees.points.xmlChildren... mais lequel ?

Stéphanie
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010

J'ai réussi même si je pense que ce n'est pas très orthodoxe.

Voilà le code :
<cfset xmlDonnees=XMLParse(ExpandPath("datas.xml"))>

<cfset arrXPs = ArrayNew(1)>
<cfset ArrayAppend(arrXPs,"/points/point")>


<cfloop index="i" from="1" to="#ArrayLen(arrXPs)#">
<cfset xp = arrXPs[i]>
<cfset arrResult = XmlSearch(xmlDonnees,xp)>
</cfloop>


<cfloop index="i" from="1" to="#ArrayLen(arrResult)#">
<cfoutput>
<cfif #FindNoCase("22/11/2010", xmlDonnees.points.xmlChildren[i].XmlAttributes.temps)#>
Date | Heure : #xmlDonnees.points.xmlChildren[i].XmlAttributes.temps#

Température de l'air : #xmlDonnees.points.xmlChildren[i].XmlAttributes.temp#°C

</cfif>
</cfoutput>
</cfloop>

Et j'obtiens :

Date | Heure : 22/11/2010|16:30:12
Température de l'air : 22°C
Date | Heure : 22/11/2010|17:30:12
Température de l'air : 22°C
Date | Heure : 22/11/2010|18:30:12
Température de l'air : 22°C

Je néanmoins suis toujours preneuse d'une solution plus efficace.
Merci pour ton aide précieuse.

Stéphanie