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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


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.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2