Sample code for 30+ languages & platforms
Unicode C

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 Unicode C Downloads

Unicode C
#include <C_CkHashtableW.h>
#include <C_CkStringBuilderW.h>
#include <C_CkStringTableW.h>

void ChilkatSample(void)
    {
    HCkHashtableW hashTab;
    HCkStringBuilderW sb;
    HCkHashtableW hashTab2;
    HCkStringTableW sTable;
    int i;
    int numKeys;
    const wchar_t *key;

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

    //  Add some entries to a hashtable.
    hashTab = CkHashtableW_Create();

    CkHashtableW_AddStr(hashTab,L"aaa",L"111");
    CkHashtableW_AddStr(hashTab,L"bbb",L"222");
    CkHashtableW_AddStr(hashTab,L"ccc",L"333");

    //  Serialize to XML
    sb = CkStringBuilderW_Create();
    CkHashtableW_ToXmlSb(hashTab,sb);
    wprintf(L"%s\n",CkStringBuilderW_getAsString(sb));
    wprintf(L"---\n");

    //  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 = CkHashtableW_Create();
    CkHashtableW_AddFromXmlSb(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 = CkStringTableW_Create();
    CkHashtableW_GetKeys(hashTab2,sTable);

    i = 0;
    numKeys = CkStringTableW_getCount(sTable);
    while (i < numKeys) {
        key = CkStringTableW_stringAt(sTable,i);
        wprintf(L"%s: %s\n",key,CkHashtableW_lookupStr(hashTab2,key));
        i = i + 1;
    }



    CkHashtableW_Dispose(hashTab);
    CkStringBuilderW_Dispose(sb);
    CkHashtableW_Dispose(hashTab2);
    CkStringTableW_Dispose(sTable);

    }