Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Oliv
Messages : 2117 Inscription : mer. 21/janv./2004 18:39
Message
par Oliv » dim. 28/déc./2008 23:55
Bonjour,
J'ai un soucis avec le XML, lors de l'appel de la fonction XMLAttributeValue() j'obtiens la bonne valeur, une valeur aléatoire, rien ou le plus souvent Invalid memory access.
Est-ce que je l'utilise mal ou est-ce que c'est un bug ?
Code : Tout sélectionner
Procedure AnalyseXML(*XML.i, Recherche.s)
Define *Fils.i
If XMLNodeType(*XML) = #PB_XML_Normal
; On cherche l'attribut voulu
If LCase(GetXMLNodeName(*XML)) = Recherche
Debug "Recherche : " + Recherche
; *****************************
; Plante ici !!!!!!!!!
; *****************************
Debug "Attribut : " + XMLAttributeValue(*XML)
EndIf
; Si il y a un noeud fils, on recommence
*Fils = ChildXMLNode(*XML)
While *Fils <> 0
AnalyseXML(*Fils, Recherche)
*Fils = NextXMLNode(*Fils)
Wend
EndIf
EndProcedure
Procedure.i ChargerXML(*Buffer.i, Len.i)
Define XML.i
; On charge le fichier XML
XML = CatchXML(#PB_Any, *Buffer, Len)
If XML
If XMLStatus(XML) <> #PB_XML_Success
MessageRequester("Erreur", "Erreur XML :" + Chr(13) + "Message: " + XMLError(XML) + Chr(13) + "Ligne: " + Str(XMLErrorLine(XML)) + " Colonne: " + Str(XMLErrorPosition(XML)))
FreeXML(XML)
XML = 0
EndIf
EndIf
ProcedureReturn XML
EndProcedure
; "Fichier" XML
chaine.s = "<?xml version=" + Chr(34) + "1.0" + Chr(34) + " encoding=" + Chr(34) + "UTF-8" + Chr(34) + "?><rss xmlns:itunes=" + Chr(34) + "http://www.itunes.com/DTDs/Podcast-1.0.dtd" + Chr(34) + " version=" + Chr(34) + "2.0" + Chr(34) + "><channel><title>testazer</title></channel></rss>"
Len.i = Len(chaine)
*Buffer.i = AllocateMemory(Len)
PokeS(*Buffer, chaine)
Debug chaine
XML.i = ChargerXML(*Buffer, Len)
If XML
AnalyseXML(MainXMLNode(XML), "title")
Else
Debug "Impossible de charger"
EndIf
Oliv
Messages : 2117 Inscription : mer. 21/janv./2004 18:39
Message
par Oliv » ven. 02/janv./2009 17:12
Personne n'a d'idées avant que j'aille voir les Anglais ?
Sachant que ce problème n'arrive apparemment qu'avec la balise "title"
comtois
Messages : 5186 Inscription : mer. 21/janv./2004 17:48
Contact :
Message
par comtois » ven. 02/janv./2009 17:20
la doc dit d'utiliser
ExamineXMLAttributes
Code : Tout sélectionner
If ExamineXMLAttributes(*XML)
While NextXMLAttribute(*XML)
Debug "Attribut : " + XMLAttributeValue(*XML)
Wend
EndIf
Progi1984
Messages : 2659 Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :
Message
par Progi1984 » ven. 02/janv./2009 17:26
Cela plante car tu ne vérifies si le noeud a des attributs.
Je t'ai modifié le code et le contenu du XML.
Code : Tout sélectionner
Procedure AnalyseXML(*XML.l, Recherche.s)
Define *Fils.i
If XMLNodeType(*XML) = #PB_XML_Normal
; On cherche l'attribut voulu
If LCase(GetXMLNodeName(*XML)) = Recherche
If ExamineXMLAttributes(*XML)
While NextXMLAttribute(*XML)
Debug XMLAttributeName(*XML) + "=" + Chr(34) + XMLAttributeValue(*XML) + Chr(34) + " "
Wend
EndIf
EndIf
; Si il y a un noeud fils, on recommence
*Fils = ChildXMLNode(*XML)
While *Fils <> 0
AnalyseXML(*Fils, Recherche)
*Fils = NextXMLNode(*Fils)
Wend
EndIf
EndProcedure
Procedure.i ChargerXML(*Buffer.i, Len.i)
Define XML.i
; On charge le fichier XML
XML = CatchXML(#PB_Any, *Buffer, Len)
If XML
If XMLStatus(XML) <> #PB_XML_Success
MessageRequester("Erreur", "Erreur XML :" + Chr(13) + "Message: " + XMLError(XML) + Chr(13) + "Ligne: " + Str(XMLErrorLine(XML)) + " Colonne: " + Str(XMLErrorPosition(XML)))
FreeXML(XML)
XML = 0
EndIf
EndIf
ProcedureReturn XML
EndProcedure
; "Fichier" XML
chaine.s = "<?xml version=" + Chr(34) + "1.0" + Chr(34) + " encoding=" + Chr(34) + "UTF-8" + Chr(34) + "?><rss xmlns:itunes=" + Chr(34) + "http://www.itunes.com/DTDs/Podcast-1.0.dtd" + Chr(34) + " version=" + Chr(34) + "2.0" + Chr(34) + "><channel><title user=" + Chr(34) + "2.0" + Chr(34) + ">testazer</title></channel></rss>"
Len.i = Len(chaine)
*Buffer.i = AllocateMemory(Len)
PokeS(*Buffer, chaine)
Debug chaine
XML.i = ChargerXML(*Buffer, Len)
If XML
AnalyseXML(MainXMLNode(XML), "title")
Else
Debug "Impossible de charger"
EndIf
Oliv
Messages : 2117 Inscription : mer. 21/janv./2004 18:39
Message
par Oliv » dim. 04/janv./2009 11:14
Rohhh quel idiot
Désolé de vous avoir embêtés pour ça....
Progi1984
Messages : 2659 Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :
Message
par Progi1984 » dim. 04/janv./2009 12:39
Pas de pb ; ca aidera des débutants