Cfm et xml [Résolu]

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

9 réponses

Meilleure réponse
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 207 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nickadele
Messages postés
2
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
28 août 2007
3
Merci
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>

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 207 internautes nous ont dit merci ce mois-ci

Commenter la réponse de zied_cfm
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010
0
Merci
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
Commenter la réponse de vachdzil
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013
0
Merci
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
Commenter la réponse de nickadele
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010
0
Merci
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
Commenter la réponse de vachdzil
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013
0
Merci
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
Commenter la réponse de nickadele
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010
0
Merci
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
Commenter la réponse de vachdzil
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010
0
Merci
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
Commenter la réponse de vachdzil
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010
0
Merci
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
Commenter la réponse de vachdzil