Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

PropList -> XML

Compatible Director MX2004. Cliquer pour en savoir plus sur les compatibilités.Par Yannick Halloin, le 13 octobre 2005

Merci à Yannick Halloin pour avoir mis ce sript à disposition !

Il permet de récupérer un fichier XML sous forme de chaîne de caractères à partir d'une liste de propriétés telle que renvoyée par la méthode makePropList du parser XML de dirMX2004

on ProplistToXML la_liste
 
 buffer = empty
 
 if(ilk(la_liste)=#proplist)then
   le_name = la_liste[#name]
   if(ilk(le_name)=#string)and(la_liste[#name]<>EMPTY)then
 
     -- ouverture balise
     buffer = buffer & "<" & le_name
 
     -- écriture des attributs
     les_attributes = la_liste[#attributes]
 
     if(ilk(les_attributes)=#proplist)then
       n = les_attributes.count
       repeat with i=1 to n
         buffer = buffer & AttributXML(les_attributes.getpropat(i),les_attributes[i])
       end repeat
     end if
 
     -- le contenu texte
     le_chardata = la_liste[#chardata]   
 
     -- les enfants
     les_children = la_liste[#child]
 
     if(ilk(les_children)=#list)then
       n = les_children.count
       if(n=0)then
         -- pas d'enfants
         if(ilk(le_chardata)=#string)and(le_chardata<>EMPTY)then
 
           -- fin de balise
           buffer = buffer & ">"
 
           -- écriture du contenu
           buffer = buffer & GrandTexteToXML(le_chardata)
 
           -- fermeture balise
           buffer = buffer & "</" & le_name & ">" & return
 
         else
           -- fermeture de balise simple
           buffer = buffer & "/>" & return
         end if
 
       else
         -- enfants
         -- fin de balise
         buffer = buffer & ">"
 
         if(ilk(le_chardata)=#string)and(le_chardata<>EMPTY)then
           -- écriture du contenu
           buffer = buffer & GrandTexteToXML(le_chardata)
         end if       
 
         -- écriture des enfants
         repeat with i=1 to n
           -- récursif
           buffer = buffer & ProplistToXML(les_children[i])
         end repeat
 
         -- fermeture balise
         buffer = buffer & "</" & le_name & ">" & return
       end if
     end if
   end if
 end if
 
 return buffer
end
 
on TexteToXML le_texte
 
 buffer = empty
 
 if(not voidp(le_texte))then
   n = the number of chars of le_texte
 
   repeat with i=1 to n
     le_car = le_texte.char[i]
 
     case le_car of
       "<": buffer = buffer & "&lt;"
       ">": buffer = buffer & "&gt;"
       "&": buffer = buffer & "&amp;"
       quote: buffer = buffer & "&quot;"
       otherwise: buffer = buffer & le_car
     end case  
 
   end repeat
 
 end if
 
 return buffer
end
 
on GrandTexteToXML le_texte
 
 buffer = empty
 
 if(not voidp(le_texte))then
   buffer = le_texte
 end if
 
 return buffer
end
 
on AttributXML nom, valeur
 
 buffer = empty
 
 if(not voidp(nom))and(nom<>EMPTY)then
   buffer = " " & nom & "=" & quote & TexteToXML(string(valeur)) & quote
 end if
 
 return buffer
end