Sample code for 30+ languages & platforms
PureBasic

Serialize / Deserialize Hashtable to/from XML

Demonstrates how to seralize / deserialize a Hashtable to/from XML.

Note: This example requires Chilkat v9.5.0.64 or later.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkStringTable.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkHashtable.pb"

Procedure ChilkatExample()

    ; Note: This example requires Chilkat v9.5.0.64 or later.

    ; Add some entries to a hashtable.
    hashTab.i = CkHashtable::ckCreate()
    If hashTab.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHashtable::ckAddStr(hashTab,"aaa","111")
    CkHashtable::ckAddStr(hashTab,"bbb","222")
    CkHashtable::ckAddStr(hashTab,"ccc","333")

    ; Serialize to XML
    sb.i = CkStringBuilder::ckCreate()
    If sb.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHashtable::ckToXmlSb(hashTab,sb)
    Debug CkStringBuilder::ckGetAsString(sb)
    Debug "---"

    ; The output is as follows.  Each hash table entry
    ; is contained in an "e" node.  The entry's key
    ; is in the "k" node, and the value in the "v" node.

    ; <?xml version="1.0" encoding="utf8-8"?>
    ; <hashtable>
    ; <e><k>aaa</k><v>111</v></e>
    ; <e><k>bbb</k><v>222</v></e>
    ; <e><k>ccc</k><v>333</v></e>
    ; </hashtable>
    ; 

    ; Now load (deserialize) into a new hash table.
    hashTab2.i = CkHashtable::ckCreate()
    If hashTab2.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHashtable::ckAddFromXmlSb(hashTab2,sb)

    ; Get the hash table keys, and lookup each (to show 
    ; that the hash table was correctly deserialized).
    ; The GetKeys method can return the keys in any order.
    sTable.i = CkStringTable::ckCreate()
    If sTable.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHashtable::ckGetKeys(hashTab2,sTable)

    i.i = 0
    numKeys.i = CkStringTable::ckCount(sTable)
    While i < numKeys
        key.s = CkStringTable::ckStringAt(sTable,i)
        Debug key + ": " + CkHashtable::ckLookupStr(hashTab2,key)
        i = i + 1
    Wend


    CkHashtable::ckDispose(hashTab)
    CkStringBuilder::ckDispose(sb)
    CkHashtable::ckDispose(hashTab2)
    CkStringTable::ckDispose(sTable)


    ProcedureReturn
EndProcedure