X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ffreenet%2Fboardlistxml.cpp;h=b4c398589011bb29647e3111a3212289cc2d7123;hb=dec33c63afafabf83c3039e916725cac6faef9b3;hp=3de52f0203d17336ebba1d3184ee2c09c405d7e7;hpb=63376b2a82c3f6cdf2df56b1f134bd7df0aaab3a;p=fms.git diff --git a/src/freenet/boardlistxml.cpp b/src/freenet/boardlistxml.cpp index 3de52f0..b4c3985 100644 --- a/src/freenet/boardlistxml.cpp +++ b/src/freenet/boardlistxml.cpp @@ -49,27 +49,35 @@ const std::string BoardListXML::GetName(const long index) std::string BoardListXML::GetXML() { - TiXmlDocument td; - TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8",""); - TiXmlElement *tid; - TiXmlPrinter tp; - - td.LinkEndChild(tdec); - tid=new TiXmlElement("BoardList"); - td.LinkEndChild(tid); + Poco::AutoPtr doc=new Poco::XML::Document; + //TiXmlDocument td; + //TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8",""); + Poco::XML::Element *root=doc->createElement("BoardList"); + //TiXmlElement *tid; + //TiXmlPrinter tp; + + doc->appendChild(root); + //td.LinkEndChild(tdec); + //tid=new TiXmlElement("BoardList"); + //td.LinkEndChild(tid); for(std::vector::iterator i=m_boards.begin(); i!=m_boards.end(); i++) { std::string boardname=(*i).m_name; StringFunctions::LowerCase(boardname,boardname); - TiXmlElement *tr=new TiXmlElement("Board"); - tid->LinkEndChild(tr); - tr->LinkEndChild(XMLCreateCDATAElement("Name",boardname)); - tr->LinkEndChild(XMLCreateCDATAElement("Description",(*i).m_description)); + Poco::XML::Element *tr=doc->createElement("Board"); + //TiXmlElement *tr=new TiXmlElement("Board"); + root->appendChild(tr); + //tid->LinkEndChild(tr); + tr->appendChild(XMLCreateCDATAElement(doc,"Name",boardname)); + //tr->LinkEndChild(XMLCreateCDATAElement("Name",boardname)); + tr->appendChild(XMLCreateCDATAElement(doc,"Description",(*i).m_description)); + //tr->LinkEndChild(XMLCreateCDATAElement("Description",(*i).m_description)); } - td.Accept(&tp); - return std::string(tp.CStr()); + //td.Accept(&tp); + //return std::string(tp.CStr()); + return GenerateXML(doc); } void BoardListXML::Initialize() @@ -79,6 +87,57 @@ void BoardListXML::Initialize() const bool BoardListXML::ParseXML(const std::string &xml) { + bool parsed=false; + Poco::XML::DOMParser dp; + + Initialize(); + + try + { + Poco::AutoPtr doc=dp.parseString(FixCDATA(xml)); + Poco::XML::Element *root=XMLGetFirstChild(doc,"BoardList"); + Poco::XML::Element *boardel=NULL; + + boardel=XMLGetFirstChild(root,"Board"); + while(boardel) + { + std::string name=""; + std::string description=""; + + Poco::XML::Element *txt=XMLGetFirstChild(boardel,"Name"); + if(txt && txt->firstChild()) + { + name=SanitizeSingleString(txt->firstChild()->getNodeValue()); + StringFunctions::LowerCase(name,name); + if(name.size()>40) + { + name.erase(40); + } + } + txt=XMLGetFirstChild(boardel,"Description"); + if(txt && txt->firstChild()) + { + description=SanitizeSingleString(txt->firstChild()->getNodeValue()); + } + + if(name!="" && description!="") + { + m_boards.push_back(board(name,description)); + } + + boardel=XMLGetNextSibling(boardel,"Board"); + } + + parsed=true; + + } + catch(...) + { + } + + return parsed; + + /* std::string name; std::string description; TiXmlDocument td; @@ -129,4 +188,5 @@ const bool BoardListXML::ParseXML(const std::string &xml) { return false; } + */ }