janschenkel at yahoo.com
Mon Dec 16 17:16:01 EST 2002
Hi Jim and Dar,
Appearently I left a bit of an error in my quick&dirty
array-to-xml scheme (I forgot to 'enquote' the keys).
Here's a better version of the serialiation function:
function serialisedArray @pArray
put "<array>" & return into tSerialisedArray
put the keys of pArray into tKeys
repeat for each line tKey in tKeys
put "<element key=" & quote & tKey & quote & \
">" & pArray[tKey] & "</element>" & return \
put "</array>" after tSerialisedArray
And to boot, here's a function to de-serialise the
string into an array.
function deSerialiseArray pString
if line 1 of pString is not "<array>" or \
line -1 of pString is not "</array>" then
return "Error: invalid string"
put 0 into tStart
get offset("<element key=" & quote, pString, tStart)
repeat until it = 0
-- first retrieve the key for the element
put tStart + it + 14 into tKStart
put offset(quote & ">", pString, tKStart) \
if tKEnd = 0 then return "Error: invalid string"
put char tKStart to (tKStart + tKEnd - 1) \
of pString into tKey
-- then retrieve the data for the element
put tKStart + tKEnd + 2 into tDStart
put offset("</element>", pString, tDStart) \
if tDEnd = 0 then return "Error: invalid string"
put char tDStart to (tDStart + tDEnd - 1) \
of pString into tData
-- store the data in the element with the key
put tData into tArray[tKey]
-- and get ready for the next retrieve cycle
put tDStart + tDEnd + 10 into tStart
get offset("<element key=" & quote, pString, \
-- pString has now been de-serialised into tArray
However, as Dar pointed out, if the data is 'polluted'
in any way (as in: contains data that might mess up
the XML-structure) then this is not a good method,
though it's arguable that you'll have trouble storing
and retrieving the data outside of custom properties
in such cases anyway.
Hope this helped,
"As we grow older, we grow both wiser and more foolish at the same time." (La Rochefoucauld)
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
More information about the Use-livecode