+string CardDAV2::GetETagValue(){
+
+ xmlDocPtr xmlCardDAVDoc;
+
+ xmlCardDAVDoc = xmlReadMemory(PageData.c_str(), (int)PageData.size(), "noname.xml", NULL, 0);
+
+ xmlNodePtr nodeLevel1;
+ xmlNodePtr nodeLevel2;
+ xmlNodePtr nodeLevel3;
+ xmlNodePtr nodeLevel4;
+ xmlNodePtr nodeLevel5;
+ xmlNodePtr nodeLevel6;
+
+ //std::map<wxString,wxString> xmlDataMap;
+
+ std::string DataFilename;
+ std::string ETagData;
+
+ std::string xmlStringSafe;
+ std::string ETagValue;
+
+ // Tranverse through the catacombs of the response to get our ETag for the file.
+
+ for (nodeLevel1 = xmlCardDAVDoc->children;
+ nodeLevel1 != NULL;
+ nodeLevel1 = nodeLevel1->next)
+ {
+
+ bool HREFFound = FALSE;
+ bool ETagFound = FALSE;
+
+ for (nodeLevel2 = nodeLevel1->children;
+ nodeLevel2 != NULL;
+ nodeLevel2 = nodeLevel2->next)
+ {
+
+ for (nodeLevel3 = nodeLevel2->children;
+ nodeLevel3 != NULL;
+ nodeLevel3 = nodeLevel3->next)
+ {
+
+ if (!xmlStrcmp(nodeLevel3->name, (const xmlChar *)"href") ||
+ !xmlStrcmp(nodeLevel3->name, (const xmlChar *)"d:href") ||
+ !xmlStrcmp(nodeLevel3->name, (const xmlChar *)"D:href")
+ ){
+
+ // Get the filename.
+
+ for (nodeLevel4 = nodeLevel3->children;
+ nodeLevel4 != NULL;
+ nodeLevel4 = nodeLevel4->next)
+ {
+
+ if (!xmlStrcmp(nodeLevel4->name, (const xmlChar *)"text") ||
+ !xmlStrcmp(nodeLevel4->name, (const xmlChar *)"d:text") ||
+ !xmlStrcmp(nodeLevel4->name, (const xmlChar *)"D:text")
+ ){
+
+ DataFilename = wxString::FromUTF8((const char*)nodeLevel4->content);
+ wxStringTokenizer wSTDFilename(DataFilename, wxT("/"));
+
+ while (wSTDFilename.HasMoreTokens()){
+
+ DataFilename = wSTDFilename.GetNextToken().ToStdString();
+
+ }
+
+ HREFFound = TRUE;
+
+ }
+
+
+
+ }
+
+ } else {
+
+ for (nodeLevel4 = nodeLevel3->children;
+ nodeLevel4 != NULL;
+ nodeLevel4 = nodeLevel4->next)
+ {
+
+ for (nodeLevel5 = nodeLevel4->children;
+ nodeLevel5 != NULL;
+ nodeLevel5 = nodeLevel5->next)
+ {
+
+ if (!xmlStrcmp(nodeLevel5->name, (const xmlChar *)"getetag") ||
+ !xmlStrcmp(nodeLevel5->name, (const xmlChar *)"d:getetag") ||
+ !xmlStrcmp(nodeLevel5->name, (const xmlChar *)"D:getetag")
+ ){
+
+ for (nodeLevel6 = nodeLevel5->children;
+ nodeLevel6 != NULL;
+ nodeLevel6 = nodeLevel6->next)
+ {
+
+ // Strip the quotes from the ETag.
+
+ ETagData = (const char*)nodeLevel6->content;
+ if (ETagData[0] == '"' && ETagData[(ETagData.size() - 1)] == '"'){
+
+ ETagData.erase(0, 1);
+ ETagData.erase((ETagData.size() - 1));
+
+ }
+
+ ETagFound = TRUE;
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+
+ }
+
+ if (HREFFound == TRUE && ETagFound == TRUE){
+
+ // Add to the map data.
+
+ ETagValue = ETagData;
+
+ HREFFound = FALSE;
+ ETagFound = FALSE;
+ break;
+
+ }
+
+
+ }
+
+ xmlFreeDoc(xmlCardDAVDoc);
+
+ return ETagValue;
+
+}
+