Cfm et xml

Résolu
zied_cfm
Messages postés
2
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
28 août 2007
- 27 août 2007 à 11:24
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

9 réponses

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

28 août 2007 à 11:40
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
3
zied_cfm
Messages postés
2
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
28 août 2007

28 août 2007 à 13:10
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>
3
vachdzil
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010

10 mars 2010 à 18:01
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
0
nickadele
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

10 mars 2010 à 20:40
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vachdzil
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010

11 mars 2010 à 09:33
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
0
nickadele
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

11 mars 2010 à 13:28
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
0
vachdzil
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010

11 mars 2010 à 13:59
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
0
vachdzil
Messages postés
10
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
11 mars 2010

11 mars 2010 à 14:36
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
0
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
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
0