+\r
+ bool parsed=false;\r
+ Poco::XML::DOMParser dp;\r
+\r
+ Initialize();\r
+\r
+ try\r
+ {\r
+ Poco::AutoPtr<Poco::XML::Document> doc=dp.parseString(FixCDATA(xml));\r
+ Poco::XML::Element *root=XMLGetFirstChild(doc,"MessageList");\r
+\r
+ Poco::XML::Element *node=XMLGetFirstChild(root,"Message");\r
+ while(node)\r
+ {\r
+ std::string date="";\r
+ int index=-1;\r
+ std::vector<std::string> boards;\r
+\r
+ Poco::XML::Element *node2=XMLGetFirstChild(node,"Date");\r
+ if(node2 && node2->firstChild())\r
+ {\r
+ date=SanitizeSingleString(node2->firstChild()->getNodeValue());\r
+ }\r
+ node2=XMLGetFirstChild(node,"Index");\r
+ if(node2 && node2->firstChild())\r
+ {\r
+ std::string indexstr=SanitizeSingleString(node2->firstChild()->getNodeValue());\r
+ StringFunctions::Convert(indexstr,index);\r
+ }\r
+ node2=XMLGetFirstChild(node,"Boards");\r
+ if(node2)\r
+ {\r
+ Poco::XML::Element *node3=XMLGetFirstChild(node2,"Board");\r
+ while(node3)\r
+ {\r
+ if(node3 && node3->firstChild())\r
+ {\r
+ std::string boardname=SanitizeSingleString(node3->firstChild()->getNodeValue());\r
+ StringFunctions::LowerCase(boardname,boardname);\r
+ if(boardname.size()>40)\r
+ {\r
+ boardname.erase(40);\r
+ }\r
+ boards.push_back(boardname);\r
+ }\r
+ node3=XMLGetNextSibling(node3,"Board");\r
+ }\r
+ }\r
+\r
+ m_messages.push_back(message(date,index,boards));\r
+\r
+ node=XMLGetNextSibling(node,"Message");\r
+ }\r
+\r
+ node=XMLGetFirstChild(root,"ExternalMessage");\r
+ while(node)\r
+ {\r
+ std::string type="";\r
+ std::string identity="";\r
+ std::string date="";\r
+ int index=-1;\r
+ std::vector<std::string> boards;\r
+\r
+ Poco::XML::Element *node2=XMLGetFirstChild(node,"Type");\r
+ if(node2 && node2->firstChild())\r
+ {\r
+ type=SanitizeSingleString(node2->firstChild()->getNodeValue());\r
+ }\r
+\r
+ if(type=="Keyed")\r
+ {\r
+ node2=XMLGetFirstChild(node,"Identity");\r
+ if(node2 && node2->firstChild())\r
+ {\r
+ identity=SanitizeSingleString(node2->firstChild()->getNodeValue());\r
+ }\r
+ node2=XMLGetFirstChild(node,"Date");\r
+ if(node2 && node2->firstChild())\r
+ {\r
+ date=SanitizeSingleString(node2->firstChild()->getNodeValue());\r
+ }\r
+ node2=XMLGetFirstChild(node,"Index");\r
+ if(node2 && node2->firstChild())\r
+ {\r
+ std::string indexstr=SanitizeSingleString(node2->firstChild()->getNodeValue());\r
+ StringFunctions::Convert(indexstr,index);\r
+ }\r
+ node2=XMLGetFirstChild(node,"Boards");\r
+ if(node2)\r
+ {\r
+ Poco::XML::Element *node3=XMLGetFirstChild(node2,"Board");\r
+ while(node3)\r
+ {\r
+ if(node3 && node3->firstChild())\r
+ {\r
+ std::string boardname=SanitizeSingleString(node3->firstChild()->getNodeValue());\r
+ StringFunctions::LowerCase(boardname,boardname);\r
+ if(boardname.size()>40)\r
+ {\r
+ boardname.erase(40);\r
+ }\r
+ boards.push_back(boardname);\r
+ }\r
+ node3=XMLGetNextSibling(node3,"Board");\r
+ }\r
+ }\r
+ m_externalmessages.push_back(externalmessage("Keyed",identity,date,index,boards));\r
+ }\r
+\r
+ node=XMLGetNextSibling(node,"ExternalMessage");\r
+ }\r
+ parsed=true;\r
+ }\r
+ catch(...)\r
+ {\r
+ }\r
+\r
+ return parsed;\r
+\r
+ /*\r