diff options
Diffstat (limited to 'ParserClass/FileManParser.cpp')
| -rw-r--r-- | ParserClass/FileManParser.cpp | 150 |
1 files changed, 76 insertions, 74 deletions
diff --git a/ParserClass/FileManParser.cpp b/ParserClass/FileManParser.cpp index 66e3c52..1434229 100644 --- a/ParserClass/FileManParser.cpp +++ b/ParserClass/FileManParser.cpp @@ -13,121 +13,123 @@ FileManParser::FileManParser(std::string data){ - this->data=data; - try { - xercesc::XMLPlatformUtils::Initialize(); - } - catch (const xercesc::XMLException& toCatch) { - // Do your failure processing here + //String to stringstream + (this->dataStream) << data; - } + //Create parser + //parser.parse_stream(dataStream); + (this->parser).parse_file("Doxygen/doc.xml"); + //Retrieve document + this->document=(this->parser).get_document(); - xercesc::XercesDOMParser *parser = new xercesc::XercesDOMParser(); - xercesc::MemBufInputSource myxml_buf((const XMLByte*)this->data.c_str(), this->data.size(), "dummy",false); + //Init root Node + this->rootNode=(this->document)->get_root_node(); - parser->parse("Doxygen/doc.xml"); + //Init container: + this->initWebsites(); - this->document=parser->getDocument(); - this->root=this->document->getDocumentElement(); - this->initWebsites(); +} -} +void FileManParser::initWebsites(){ + this->websites=new std::vector<Website>; + std::vector<xmlpp::Node*> websitesNodeSet=this->rootNode->find("//websites"); + this->websitesNode=websitesNodeSet.at(0); -FileManContainer FileManParser::getContainer(){ - return this->container; -} + std::vector<xmlpp::Node*> websiteNodeSet=this->websitesNode->find("*"); + for(int i=0;i<websiteNodeSet.size();i++){ + xmlpp::Node* current=websiteNodeSet.at(i); + xmlpp::Element* currentElement=(xmlpp::Element*)current; -std::string FileManParser::getData(){ return this->data;}; + Website newWebsite; + newWebsite.setId(currentElement->get_attribute_value("id")); + std::vector<xmlpp::Node*> websiteChildren=current->find("*"); + for(int j=0;j<websiteChildren.size();j++){ + xmlpp::Element* currentChild=(xmlpp::Element*)websiteChildren.at(j); -void FileManParser::initWebsites(){ + std::list<xmlpp::Node*> contentNodes=currentChild->get_children(); + xmlpp::CdataNode* cdataNode=(xmlpp::CdataNode*)contentNodes.front(); + std::string cdataContent=cdataNode->get_content(); - //Get websites élément - xercesc::DOMElement* websitesElement=this->getChildByTagName(this->root, "websites"); - //Make list of website - xercesc::DOMNodeList* websiteList=websitesElement->getChildNodes(); - XMLSize_t websiteCount = websiteList->getLength(); + if(currentChild->get_name().compare("title")==0){ + newWebsite.setTitle(cdataContent); + } + else if(currentChild->get_name().compare("url")==0){ + newWebsite.setUrl(cdataContent); + } + else if(currentChild->get_name().compare("username")==0){ + newWebsite.setUsername(cdataContent); + } + else if(currentChild->get_name().compare("password")==0){ + newWebsite.setPassword(cdataContent); + } + else if(currentChild->get_name().compare("description")==0){ + newWebsite.setDescription(cdataContent); + } - //Read the list of website - for(int i=0;i<websiteCount;i++){ - xercesc::DOMNode* current=websiteList->item(i); - std::string TagName=xercesc::XMLString::transcode(current->getNodeName()); + } - if( current->getNodeType() == xercesc::DOMNode::ELEMENT_NODE ) { - Website newWebsite; + this->websites->push_back(newWebsite); - //Get id - XMLCh* idXMLCh=(XMLCh*)((xercesc::DOMElement*)current)->getAttribute((XMLCh*) xercesc::XMLString::transcode("id")); - //Convert id to string from XMLCh - std::string id=xercesc::XMLString::transcode(idXMLCh); - //Assign id - newWebsite.setId(id); + } - //Assign title - newWebsite.setTitle(\ - this->getContentOfChild(dynamic_cast< xercesc::DOMElement* >( current ),"title")); +} - //Assign url - newWebsite.setUrl(\ - this->getContentOfChild(dynamic_cast< xercesc::DOMElement* >( current ),"url")); - //Assign username - newWebsite.setUsername(\ - this->getContentOfChild(dynamic_cast< xercesc::DOMElement* >( current ),"username")); - //Assign password - newWebsite.setPassword(\ - this->getContentOfChild(dynamic_cast< xercesc::DOMElement* >( current ),"password")); - //Assign description - newWebsite.setDescription(\ - this->getContentOfChild(dynamic_cast< xercesc::DOMElement* >( current ),"description")); +std::string FileManParser::getDocument(){ + std::string data=(this->document)->write_to_string(); + return data; +} - //Add website to container - this->container.addWebsite(newWebsite); - } - } + +std::vector<Website>* FileManParser::getWebsites(){ + return this->websites; + } -xercesc::DOMElement* FileManParser::getChildByTagName(xercesc::DOMElement* node, std::string TagName){ - xercesc::DOMNodeList* nodeList=node->getChildNodes(); - XMLSize_t nodeCount = nodeList->getLength(); - xercesc::DOMElement* returnElement=NULL; +void FileManParser::updateParser(){ + this->rootNode->remove_child(this->websitesNode); - for(int i=0;i<nodeCount;i++){ + xmlpp::Element* websitesNode=this->rootNode->add_child("websites"); + this->websitesNode=(xmlpp::Node*)websitesNode; - xercesc::DOMNode* current=nodeList->item(i); - std::string currentTagName=xercesc::XMLString::transcode(current->getNodeName()); + for(int i=0;i<this->websites->size();i++){ + xmlpp::Element* current=this->websitesNode->add_child("website"); + Website currentWebsite=this->websites->at(i); - if( current->getNodeType() == xercesc::DOMNode::ELEMENT_NODE ) { - if(currentTagName.compare(TagName)==0){ - returnElement=dynamic_cast< xercesc::DOMElement* >( current ); - break; - } - } - } + current->set_attribute("id", currentWebsite.getId()); + xmlpp::Element* title=current->add_child("title"); + title->add_child_cdata(currentWebsite.getTitle()); - return returnElement; -} + xmlpp::Element* url=current->add_child("url"); + url->add_child_cdata(currentWebsite.getUrl()); + xmlpp::Element* username=current->add_child("username"); + username->add_child_cdata(currentWebsite.getUsername()); -std::string FileManParser::getContentOfChild(xercesc::DOMElement* node,std::string TagName){ - xercesc::DOMElement* child=this->getChildByTagName(node,TagName); - return xercesc::XMLString::transcode(child->getTextContent()); + xmlpp::Element* password=current->add_child("password"); + password->add_child_cdata(currentWebsite.getPassword()); + + xmlpp::Element* description=current->add_child("description"); + description->add_child_cdata(currentWebsite.getDescription()); + + } } |
