Page 1 sur 1

Problème avec la lib xml (expat)

Publié : lun. 02/juil./2007 11:25
par wolfjeremy
Salut,

Je voudrais savoir, comment lire les donnée qui ce trouve dans ces balises :
<![CDATA[ ]]>
Car si je li simplement le noeud, j'obtient une liste de petit symbole (des petit rectangle).

D'avance je vous remercie pour votre aide.

Publié : lun. 02/juil./2007 13:08
par Progi1984
Même en unicode ?

Publié : lun. 02/juil./2007 15:26
par wolfjeremy
Comment je passe en unicode ? :?

Si je met activer le support unicode dans le compilateur, j'ai mon script qui décone et qui dit que mon noeud n'existe pas.

Re: Problème avec la lib xml (expat)

Publié : mer. 01/janv./2014 15:18
par MetalOS
Je relance ce vieux sujet de mon pote Wolf sur comment lire les données des balise CDATA d'un fichier xml.

J'utilise GetXMLNodeText() pour récupérer la donnée d'un noeud et qui fonctionne très bien mais j'ai un noeud comme ceci

Code : Tout sélectionner

<weatherIconUrl>
   <![CDATA[http://cdn.worldweatheronline.net/images/wsymbols01_png_64/wsymbol_0002_sunny_intervals.png]]>
</weatherIconUrl>
Et quand je fait :

Code : Tout sélectionner

*nodeUrlIcon = XMLNodeFromPath(MainXMLNode(#xmlWeather), "current_condition/weatherIconUrl") 
  UrlIcon$ = GetXMLNodeText(*nodeUrlIcon)

Debug "Url icone: " + UrlIcon$

Je n'est rien alors que sur les autres noeuds sa fonctionne très bien. La doc de PB ne semble pas en parler, du moins je n'est pas trouvé.

Re: Problème avec la lib xml (expat)

Publié : mer. 08/janv./2014 20:04
par MetalOS
Personne n'à d'idée ?

Re: Problème avec la lib xml (expat)

Publié : jeu. 09/janv./2014 2:14
par falsam
■ Exemple de fichier xml (metalos.xml) pour ce test.

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <request>
        <type>City</type>
        <query>Dhaka, Bangladesh</query>
    </request>
    <current_condition>
        <observation_time>01:57 PM</observation_time>
        <temp_C>33</temp_C>
        <temp_F>91</temp_F>
        <weatherCode>113</weatherCode>
        <weatherIconUrl>
            <![CDATA[http://cdn.worldweatheronline.net/images/wsymbols01_png_64/wsymbol_0008_clear_sky_night.png]]>
        </weatherIconUrl>
        <weatherDesc>
            <![CDATA[Clear ]]>
        </weatherDesc>
        <windspeedMiles>2</windspeedMiles>
        <windspeedKmph>4</windspeedKmph>
        <winddirDegree>77</winddirDegree>
        <winddir16Point>ENE</winddir16Point>
        <precipMM>0.0</precipMM>
        <humidity>76</humidity>
        <visibility>10</visibility>
        <pressure>1006</pressure>
        <cloudcover>2</cloudcover>
    </current_condition>
    <weather>
        <date>2013-10-11</date>
        <tempMaxC>36</tempMaxC>
        <tempMaxF>97</tempMaxF>
        <tempMinC>25</tempMinC>
        <tempMinF>77</tempMinF>
        <windspeedMiles>5</windspeedMiles>
        <windspeedKmph>8</windspeedKmph>
        <winddirection>ENE</winddirection>
        <winddir16Point>ENE</winddir16Point>
        <winddirDegree>65</winddirDegree>
        <weatherCode>113</weatherCode>
        <weatherIconUrl>
            <![CDATA[http://cdn.worldweatheronline.net/images/wsymbols01_png_64/wsymbol_0001_sunny.png]]>
        </weatherIconUrl>
        <weatherDesc>
            <![CDATA[Sunny]]>
        </weatherDesc>
        <precipMM>0.0</precipMM>
    </weather>
</data>
Il contient bien une url dans une balise cdata.

■ Le code d'extraction des données

Code : Tout sélectionner

Enumeration
  #XML
EndEnumeration

Global Buffer.s, NodeName.s, NodeText.s

Procedure ReadXML(*CurrentNode, CurrentSublevel)
  
  If XMLNodeType(*CurrentNode) = #PB_XML_Normal Or XMLNodeType(*CurrentNode) = #PB_XML_CData
    If XMLNodeType(*CurrentNode) = #PB_XML_Normal
      Buffer = ""
      NodeName = GetXMLNodeName(*CurrentNode) ; Nom du noeud
      NodeText = GetXMLNodeText(*CurrentNode) ; Valeur du noeud
      If Trim(RemoveString(NodeText, #CRLF$))<>""
        Buffer = NodeName + " = " + NodeText  
      EndIf
    EndIf
    
    If XMLNodeType(*CurrentNode) = #PB_XML_CData
      NodeText = GetXMLNodeText(*CurrentNode) ; Valeur du noeud
      Buffer = NodeName + " = " + NodeText  
    EndIf
    
    If Trim(Buffer)<>""
      Debug Trim(Buffer)
    EndIf
      
  EndIf
  
  *ChildNode = ChildXMLNode(*CurrentNode)    
    
  While *ChildNode <> 0
    ReadXML(*ChildNode, CurrentSublevel + 1)      
    *ChildNode = NextXMLNode(*ChildNode)
  Wend        

EndProcedure


FileName$ = OpenFileRequester("Ouvrir un fichier XML...", "", "Fichier XML (*.xml)|*.xml|Tous les fichiers (*.*)|*.*", 0)

If FileName$ <> ""
  If LoadXML(#XML, FileName$)
    If XMLStatus(#XML) <> #PB_XML_Success
      Message$ = "Error in the XML file:" + Chr(13)
      Message$ + "Message: " + XMLError(#XML) + Chr(13)
      Message$ + "Line: " + Str(XMLErrorLine(#XML)) + "   Character: " + Str(XMLErrorPosition(#XML))
      MessageRequester("Error", Message$)
    EndIf
     
    *MainNode = MainXMLNode(#XML)      
    If *MainNode
        ReadXML(*MainNode, 0)
    EndIf
                    
  Else
    MessageRequester("Erreur", "Ce fichier XML ne peut etre ouvert")
  EndIf

EndIf
■ Et enfin le résultat
type = City
query = Dhaka, Bangladesh
observation_time = 01:57 PM
temp_C = 33
temp_F = 91
weatherCode = 113
weatherIconUrl = http://cdn.worldweatheronline.net/image ... _night.png
weatherDesc = Clear
windspeedMiles = 2
windspeedKmph = 4
winddirDegree = 77
winddir16Point = ENE
precipMM = 0.0
humidity = 76
visibility = 10
pressure = 1006
cloudcover = 2
date = 2013-10-11
tempMaxC = 36
tempMaxF = 97
tempMinC = 25
tempMinF = 77
windspeedMiles = 5
windspeedKmph = 8
winddirection = ENE
winddir16Point = ENE
winddirDegree = 65
weatherCode = 113
weatherIconUrl = http://cdn.worldweatheronline.net/image ... _sunny.png
weatherDesc = Sunny
precipMM = 0.0
En espérant que c'était bien l'objet de ta demande :)

Re: Problème avec la lib xml (expat)

Publié : lun. 13/janv./2014 16:46
par MetalOS
Désolé de la réponse tardive mais c'est exactement ça. Merci falsam ;-)