\r
std::string MessageListXML::GetXML()\r
{\r
- TiXmlDocument td;\r
- TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8","");\r
- TiXmlElement *tid;\r
- TiXmlPrinter tp;\r
+ Poco::AutoPtr<Poco::XML::Document> doc=new Poco::XML::Document;\r
+ Poco::AutoPtr<Poco::XML::Element> root=doc->createElement("MessageList");\r
\r
- td.LinkEndChild(tdec);\r
- tid=new TiXmlElement("MessageList");\r
- td.LinkEndChild(tid);\r
+ doc->appendChild(root);\r
\r
for(std::vector<message>::iterator i=m_messages.begin(); i!=m_messages.end(); i++)\r
{\r
- TiXmlElement *tr=new TiXmlElement("Message");\r
- tid->LinkEndChild(tr);\r
- tr->LinkEndChild(XMLCreateTextElement("Date",(*i).m_date));\r
- tr->LinkEndChild(XMLCreateTextElement("Index",(*i).m_index));\r
- TiXmlElement *brds=new TiXmlElement("Boards");\r
- tr->LinkEndChild(brds);\r
+ Poco::AutoPtr<Poco::XML::Element> tr=doc->createElement("Message");\r
+ root->appendChild(tr);\r
+ tr->appendChild(XMLCreateTextElement(doc,"Date",(*i).m_date));\r
+ tr->appendChild(XMLCreateTextElement(doc,"Index",(*i).m_index));\r
+ \r
+ Poco::AutoPtr<Poco::XML::Element> boards=doc->createElement("Boards");\r
+ tr->appendChild(boards);\r
for(std::vector<std::string>::iterator j=(*i).m_boards.begin(); j!=(*i).m_boards.end(); j++)\r
{\r
- brds->LinkEndChild(XMLCreateCDATAElement("Board",(*j)));\r
+ boards->appendChild(XMLCreateCDATAElement(doc,"Board",(*j)));\r
}\r
}\r
\r
for(std::vector<externalmessage>::iterator i=m_externalmessages.begin(); i!=m_externalmessages.end(); i++)\r
{\r
- TiXmlElement *tr=new TiXmlElement("ExternalMessage");\r
- tid->LinkEndChild(tr);\r
- tr->LinkEndChild(XMLCreateTextElement("Type",(*i).m_type));\r
+ Poco::AutoPtr<Poco::XML::Element> tr=doc->createElement("ExternalMessage");\r
+ root->appendChild(tr);\r
+ tr->appendChild(XMLCreateTextElement(doc,"Type",(*i).m_type));\r
if((*i).m_type=="Keyed")\r
{\r
- tr->LinkEndChild(XMLCreateCDATAElement("Identity",(*i).m_identity));\r
- tr->LinkEndChild(XMLCreateTextElement("Index",(*i).m_index));\r
+ tr->appendChild(XMLCreateCDATAElement(doc,"Identity",(*i).m_identity));\r
+ tr->appendChild(XMLCreateTextElement(doc,"Index",(*i).m_index));\r
}\r
else\r
{\r
- tr->LinkEndChild(XMLCreateCDATAElement("MessageKey",(*i).m_messagekey));\r
+ tr->appendChild(XMLCreateCDATAElement(doc,"MessageKey",(*i).m_messagekey));\r
}\r
- tr->LinkEndChild(XMLCreateTextElement("Date",(*i).m_date));\r
- TiXmlElement *brds=new TiXmlElement("Boards");\r
- tr->LinkEndChild(brds);\r
+ tr->appendChild(XMLCreateTextElement(doc,"Date",(*i).m_date));\r
+\r
+ Poco::AutoPtr<Poco::XML::Element> boards=doc->createElement("Boards");\r
+ tr->appendChild(boards);\r
for(std::vector<std::string>::iterator j=(*i).m_boards.begin(); j!=(*i).m_boards.end(); j++)\r
{\r
- brds->LinkEndChild(XMLCreateCDATAElement("Board",(*j)));\r
+ boards->appendChild(XMLCreateCDATAElement(doc,"Board",(*j)));\r
}\r
}\r
\r
- td.Accept(&tp);\r
- return std::string(tp.CStr());\r
+ return GenerateXML(doc);\r
}\r
\r
void MessageListXML::Initialize()\r
\r
const bool MessageListXML::ParseXML(const std::string &xml)\r
{\r
- TiXmlDocument td;\r
- td.Parse(xml.c_str());\r
\r
- if(!td.Error())\r
- {\r
- std::string tempstr;\r
- std::string date;\r
- long index;\r
- std::vector<std::string> boards;\r
- TiXmlText *txt;\r
- TiXmlHandle hnd(&td);\r
- TiXmlNode *node;\r
- TiXmlNode *node2;\r
+ bool parsed=false;\r
+ Poco::XML::DOMParser dp;\r
\r
- Initialize();\r
+ Initialize();\r
\r
- node=hnd.FirstChild("MessageList").FirstChild("Message").ToNode();\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
- date="";\r
- index=-1;\r
- boards.clear();\r
+ std::string date="";\r
+ int index=-1;\r
+ std::vector<std::string> boards;\r
\r
- TiXmlHandle hnd2(node);\r
- txt=hnd2.FirstChild("Date").FirstChild().ToText();\r
- if(txt)\r
+ Poco::XML::Element *node2=XMLGetFirstChild(node,"Date");\r
+ if(node2 && node2->firstChild())\r
{\r
- date=txt->ValueStr();\r
+ date=SanitizeSingleString(node2->firstChild()->getNodeValue());\r
}\r
- txt=hnd2.FirstChild("Index").FirstChild().ToText();\r
- if(txt)\r
+ node2=XMLGetFirstChild(node,"Index");\r
+ if(node2 && node2->firstChild())\r
{\r
- tempstr=txt->ValueStr();\r
- StringFunctions::Convert(tempstr,index);\r
+ std::string indexstr=SanitizeSingleString(node2->firstChild()->getNodeValue());\r
+ StringFunctions::Convert(indexstr,index);\r
}\r
- node2=hnd2.FirstChild("Boards").FirstChild("Board").ToNode();\r
- while(node2)\r
+ node2=XMLGetFirstChild(node,"Boards");\r
+ if(node2)\r
{\r
- if(node2->FirstChild())\r
+ Poco::XML::Element *node3=XMLGetFirstChild(node2,"Board");\r
+ while(node3)\r
{\r
- boards.push_back(node2->FirstChild()->ValueStr());\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
- node2=node2->NextSibling("Board");\r
}\r
\r
m_messages.push_back(message(date,index,boards));\r
\r
- node=node->NextSibling("Message");\r
+ node=XMLGetNextSibling(node,"Message");\r
}\r
\r
- return true;\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
- else\r
+ catch(...)\r
{\r
- return false;\r
}\r
+\r
+ return parsed;\r
}\r