diff options
Diffstat (limited to 'src/libdash/source/xml/DOMParser.cpp')
-rw-r--r-- | src/libdash/source/xml/DOMParser.cpp | 160 |
1 files changed, 0 insertions, 160 deletions
diff --git a/src/libdash/source/xml/DOMParser.cpp b/src/libdash/source/xml/DOMParser.cpp deleted file mode 100644 index 5feb3850..00000000 --- a/src/libdash/source/xml/DOMParser.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/* - * DOMParser.cpp - ***************************************************************************** - * Copyright (C) 2012, bitmovin Softwareentwicklung OG, All Rights Reserved - * - * Email: libdash-dev@vicky.bitmovin.net - * - * This source code and its use and distribution, is subject to the terms - * and conditions of the applicable license agreement. - *****************************************************************************/ - -#include "DOMParser.h" - -using namespace dash::xml; -using namespace dash::helpers; - -DOMParser::DOMParser (std::string url) : - url (url), - reader (NULL), - root (NULL) -{ - this->Init(); -} -DOMParser::~DOMParser () -{ - xmlCleanupParser(); - delete(this->root); -} - -Node* DOMParser::GetRootNode () const -{ - return this->root; -} -bool DOMParser::Parse (std::string path) -{ - this->reader = xmlReaderForFile(this->url.c_str(), NULL, 0); - - if(this->reader == NULL) - return false; - - if(xmlTextReaderRead(this->reader)) - this->root = this->ProcessNode(path); - - if(this->root == NULL) - return false; - - xmlFreeTextReader(this->reader); - - return true; -} -Node* DOMParser::ProcessNode (std::string path) -{ - int type = xmlTextReaderNodeType(this->reader); - - if(type != WhiteSpace && type != Text) - { - while (type == Comment || type == WhiteSpace) - { - xmlTextReaderRead(this->reader); - type = xmlTextReaderNodeType(this->reader); - } - - Node *node = new Node(); - node->SetType(type); - if(!(strcmp("",path.c_str()))) - node->SetMPDPath(Path::GetDirectoryPath(url)); - else - node->SetMPDPath(Path::GetDirectoryPath(path)); - if(xmlTextReaderConstName(this->reader) == NULL) - { - delete node; - return NULL; - } - - std::string name = (const char *) xmlTextReaderConstName(this->reader); - int isEmpty = xmlTextReaderIsEmptyElement(this->reader); - - node->SetName(name); - - this->AddAttributesToNode(node); - - if(isEmpty) - return node; - - Node *subnode = NULL; - int ret = xmlTextReaderRead(this->reader); - - while(ret == 1) - { - if(!strcmp(name.c_str(), (const char *) xmlTextReaderConstName(this->reader))) - { - return node; - } - - subnode = this->ProcessNode(path); - - if(subnode != NULL) - node->AddSubNode(subnode); - - ret = xmlTextReaderRead(this->reader); - } - - return node; - } else if (type == Text) - { - const char* text = (const char *) xmlTextReaderReadString(this->reader); - - if(text != NULL) - { - Node *node = new Node(); - node->SetType(type); - node->SetText(text); - return node; - } - } - return NULL; -} -void DOMParser::AddAttributesToNode (Node *node) -{ - if(xmlTextReaderHasAttributes(this->reader)) - { - while(xmlTextReaderMoveToNextAttribute(this->reader)) - { - std::string key = (const char *) xmlTextReaderConstName(this->reader); - std::string value = (const char *) xmlTextReaderConstValue(this->reader); - node->AddAttribute(key, value); - } - } -} -void DOMParser::Print (Node *node, int offset) -{ - std::stringstream ss; - for(int i = 0; i < offset; i++) - ss << " "; - ss << node->GetName(); - - std::vector<std::string> keys = node->GetAttributeKeys(); - - ss.clear(); - for(unsigned int i = 0; i < keys.size(); i++) - { - ss << " " << keys.at(i) << "=" << node->GetAttributeValue(keys.at(i)); - } - - offset++; - - for(unsigned int i = 0; i < node->GetSubNodes().size(); i++) - { - this->Print(node->GetSubNodes().at(i), offset); - } -} -void DOMParser::Init () -{ - this->root = NULL; - this->reader = NULL; -} -void DOMParser::Print () -{ - this->Print(this->root, 0); -} |