\r
std::string BoardListXML::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("BoardList");\r
\r
- td.LinkEndChild(tdec);\r
- tid=new TiXmlElement("BoardList");\r
- td.LinkEndChild(tid);\r
+ doc->appendChild(root);\r
\r
for(std::vector<board>::iterator i=m_boards.begin(); i!=m_boards.end(); i++)\r
{\r
std::string boardname=(*i).m_name;\r
- StringFunctions::Convert(boardname,boardname);\r
- TiXmlElement *tr=new TiXmlElement("Board");\r
- tid->LinkEndChild(tr);\r
- tr->LinkEndChild(XMLCreateCDATAElement("Name",boardname));\r
- tr->LinkEndChild(XMLCreateCDATAElement("Description",(*i).m_description));\r
+ StringFunctions::LowerCase(boardname,boardname);\r
+ Poco::AutoPtr<Poco::XML::Element> tr=doc->createElement("Board");\r
+ root->appendChild(tr);\r
+ tr->appendChild(XMLCreateCDATAElement(doc,"Name",boardname));\r
+ tr->appendChild(XMLCreateCDATAElement(doc,"Description",(*i).m_description));\r
}\r
\r
- td.Accept(&tp);\r
- return std::string(tp.CStr());\r
+ return GenerateXML(doc);\r
}\r
\r
void BoardListXML::Initialize()\r
\r
const bool BoardListXML::ParseXML(const std::string &xml)\r
{\r
- std::string name;\r
- std::string description;\r
- TiXmlDocument td;\r
- td.Parse(xml.c_str());\r
+ bool parsed=false;\r
+ Poco::XML::DOMParser dp;\r
\r
- if(!td.Error())\r
- {\r
- TiXmlText *txt;\r
- TiXmlHandle hnd(&td);\r
- TiXmlNode *node;\r
+ Initialize();\r
\r
- Initialize();\r
+ try\r
+ {\r
+ Poco::AutoPtr<Poco::XML::Document> doc=dp.parseString(FixCDATA(xml));\r
+ Poco::XML::Element *root=XMLGetFirstChild(doc,"BoardList");\r
+ Poco::XML::Element *boardel=NULL;\r
\r
- node=hnd.FirstChild("BoardList").FirstChild("Board").ToElement();\r
- while(node)\r
+ boardel=XMLGetFirstChild(root,"Board");\r
+ while(boardel)\r
{\r
- name="";\r
- description="";\r
+ std::string name="";\r
+ std::string description="";\r
\r
- TiXmlHandle hnd2(node);\r
- txt=hnd2.FirstChild("Name").FirstChild().ToText();\r
- if(txt)\r
+ Poco::XML::Element *txt=XMLGetFirstChild(boardel,"Name");\r
+ if(txt && txt->firstChild())\r
{\r
- name=txt->ValueStr();\r
+ name=SanitizeSingleString(txt->firstChild()->getNodeValue());\r
StringFunctions::LowerCase(name,name);\r
if(name.size()>40)\r
{\r
name.erase(40);\r
}\r
}\r
- txt=hnd2.FirstChild("Description").FirstChild().ToText();\r
- if(txt)\r
+ txt=XMLGetFirstChild(boardel,"Description");\r
+ if(txt && txt->firstChild())\r
{\r
- description=txt->ValueStr();\r
+ description=SanitizeSingleString(txt->firstChild()->getNodeValue());\r
}\r
\r
if(name!="" && description!="")\r
{\r
m_boards.push_back(board(name,description));\r
}\r
- \r
- node=node->NextSibling("Board");\r
+\r
+ boardel=XMLGetNextSibling(boardel,"Board");\r
}\r
- return true;\r
+\r
+ parsed=true;\r
\r
}\r
- else\r
+ catch(...)\r
{\r
- return false;\r
}\r
+\r
+ return parsed;\r
}\r