|
Lire du XML "particulier" |
|
Utilisateur WDF
Inscrit: 22/03/2005 14:40
De Lyon Rhône France
Post(s): 51
|
Bonjour, Il y a-t'il un moyen, via windev de récupérer une valeur de type donc contenir des caractères spéciaux comme > ou <.]]> Bien que le standard XML soit justement de ne pas parser ce genre d'information. XMLDonnée("title") me renvoie "", ce qui est un fonctionnement normal, car ma balise est de forme <title><![CDATA[Le contrat «nouvelle embauche» applicable dès demain ]]></title>
Bon bien sûr, sans polémiquer, c'est le format des RSS du figaro, je suis plus enclin à lire ceux du monde, mais j'imagine que d'autres ne sont pas de mon avis !!!! Des idées ? -- Cordialement Christophe Charron
Contribution le : 04/08/2005 09:31
|
|
|
Re: Lire du XML "particulier" |
|
Utilisateur WDF
Inscrit: 22/03/2005 14:40
De Lyon Rhône France
Post(s): 51
|
Bonjour, et bien oui, d'ailleurs ce n'est pas vraiment un contournement, c'est une variante dirais-je : SI SansEspace(XMLDonnée(xITM)) = "" ALORS
vl_c_Data =
XMLExtraitChaîne(sTemp,XMLNomElément(xITM),1,XMLIgnoreLaCasse)
SI Position(vl_c_Data,"<![CDATA[") <> 0 ALORS
vl_c_Data = Remplace(vl_c_Data,"<![CDATA[","")
vl_c_Data = Remplace(vl_c_Data,"]]>","")
FIN
SINON
vl_c_Data = XMLDonnée(xITM)
FIN
Contribution le : 04/08/2005 12:22
|
|
|
Re: Lire du XML "particulier" |
|
Animateur WDF
Inscrit: 26/06/2002 16:24
De wdforge.org
Post(s): 2822
|
Bonjour Concernant le Flux RSS de WDForge.org, voici la modification nécessaire pour une lecture dans le bon encodage... Dans la classe "Rss", méthode "import", il faut remplacer sTemp = XMLConstruitChaîne(xRSS,XMLSansEntête+XMLPositionCourante,XMLEncodageIso8859_1)
par // Récupère le code XML du channel
SI Position(sContenuRSS, "encoding=""UTF-8""",1,SansCasse)>0 ALORS
sTemp = XMLConstruitChaîne(xRSS,XMLSansEntête+XMLPositionCourante,XMLEncodageUTF8)
SINON
sTemp = XMLConstruitChaîne(xRSS,XMLSansEntête+XMLPositionCourante,XMLEncodageIso8859_1)
FIN
Merci xofxon !
Contribution le : 04/08/2005 16:26
|
|
|
Re: Lire du XML "particulier" |
|
Utilisateur WDF
Inscrit: 22/03/2005 14:40
De Lyon Rhône France
Post(s): 51
|
Bonjour, toujours pour une lecture plus pertinente des rss, il faut "surcharger" la procédure privée "ExtraitDate" de la classe "RSS" avec une nouvelle méthode, procédure "ExtraitDate_Finement" PROCEDURE PRIVÉE ExtraitDate(sFormat)
// Convertit les dates chaines en DateHeure W-Langage
dDateHeure est une DateHeure
// Année Mois Jour
dDateHeure..PartieDate = ExtraitChaîne(sFormat, 4, " ") + :VersMoisEnChiffre(ExtraitChaîne(sFormat, 3, " ")) + ExtraitChaîne(sFormat, 2, " ")
dDateHeure..PartieHeure = SansEspace(Remplace(ExtraitChaîne(sFormat, 5, " "), ":", ""))
dDate est une Date = (dDateHeure..PartieDate)
SI dDate..Jour = 00 ALORS
dDateHeure..PartieDate = dDate..Année + dDate..Mois + "01"
FIN
Trace("Sauce PC-Soft : Extraction de la date <"+sFormat+"> qui renvoie <"+dDateHeure+">")
dDateHeure = :ExtraitDate_Finement(sFormat)
Trace("Sauce Moi+Fin : Extraction de la date <"+sFormat+"> qui renvoie <"+dDateHeure+">")
RENVOYER dDateHeure
PROCEDURE ExtraitDate_Finement(vv_chaine_date)
vl_e_i est un entier
vl_e_tmp est un entier
vl_d_date est une chaîne
vl_tc_MOIS est un tableau de 12 chaînes
vl_c_AAAA est une chaîne
vl_c_MM est une chaîne
vl_c_JJ est une chaîne
vl_c_HH est une chaîne
vl_c_MIN est une chaîne
vl_c_SS est une chaîne
vl_e_res est un entier
vl_tc_MOIS[1] = "Jan"
vl_tc_MOIS[2] = "Feb"
vl_tc_MOIS[3] = "Mar"
vl_tc_MOIS[4] = "Apr"
vl_tc_MOIS[5] = "May"
vl_tc_MOIS[6] = "Jun"
vl_tc_MOIS[7] = "Jul"
vl_tc_MOIS[8] = "Aug"
vl_tc_MOIS[9] = "Sep"
vl_tc_MOIS[10] = "Oct"
vl_tc_MOIS[11] = "Nov"
vl_tc_MOIS[12] = "Dec"
vl_e_i = Position(vv_chaine_date,",",0)
TANTQUE vv_chaine_date[[vl_e_i+1]] = " "
vl_e_i++
FIN
vl_e_i++
SI vv_chaine_date[[vl_e_i+1]] = " " ALORS
vl_e_res = vv_chaine_date[[vl_e_i]]
vl_c_JJ = NumériqueVersChaine(vl_e_res,"02d")
SINON
vl_e_res = vv_chaine_date[[vl_e_i A vl_e_i+1]]
vl_c_JJ = NumériqueVersChaine(vl_e_res,"02d")
vl_e_i++
FIN
TANTQUE vv_chaine_date[[vl_e_i+1]] = " "
vl_e_i++
FIN
vl_e_i++
vl_c_MM = vv_chaine_date[[vl_e_i A vl_e_i+2]]
vl_e_tmp = vl_e_i+2
POUR vl_e_i=1 A 12
SI Position(vl_tc_MOIS[vl_e_i],vl_c_MM,0,SansCasse) <>0 ALORS
SORTIR
FIN
FIN
vl_c_MM = NumériqueVersChaine(vl_e_i,"02d")
vl_e_res = vv_chaine_date[[vl_e_tmp+2 A vl_e_tmp+5]]
vl_c_AAAA = NumériqueVersChaine(vl_e_res,"04d")
vl_e_res = vv_chaine_date[[vl_e_tmp+7 A vl_e_tmp+8]]
vl_c_HH = NumériqueVersChaine(vl_e_res,"02d")
vl_e_res = vv_chaine_date[[vl_e_tmp+10 A vl_e_tmp+11]]
vl_c_MIN = NumériqueVersChaine(vl_e_res,"02d")
vl_e_res = vv_chaine_date[[vl_e_tmp+13 A vl_e_tmp+14]]
vl_c_SS = NumériqueVersChaine(vl_e_res,"02d")
vl_d_date = vl_c_AAAA+vl_c_MM+vl_c_JJ+vl_c_HH+vl_c_MIN+vl_c_SS
RENVOYER vl_d_date
Ainsi une la chaine "Thu, 4 Aug 2005 14:48:38 +0200" interprêtée exotiquement par l'actuelle procédure renverra une date heure plus "normale" Sauce PC-Soft : Extraction de la date qui renvoie <20050804220000000> Sauce Moi+Fin : Extraction de la date qui renvoie <20050804220000000>
Sauce PC-Soft : Extraction de la date qui renvoie <00000000200500000> Sauce Moi+Fin : Extraction de la date qui renvoie <20050804144838000>
Reste encore à traiter un éventuel ajustement de l'heure entre paramètres locaux et GMT.
-- Cordialement Christophe Charron
Contribution le : 05/08/2005 11:19
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|