Changeset 144 for osgVisual/src/util
- Timestamp:
- Nov 1, 2010, 6:24:56 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
osgVisual/src/util/visual_util.cpp
r130 r144 25 25 util::~util(void) 26 26 { 27 } 28 29 xmlNode* util::getModuleXMLConfig(std::string configFilename, std::string moduleName, xmlDoc*& doc) 30 { 31 doc = NULL; 32 xmlNode *root_element = NULL; 33 34 // Check for valid parameters 35 if(configFilename == "") 36 { 37 OSG_ALWAYS << "ERROR - util::getModuleXMLConfig() : Invalid Configuration Filename!" << std::endl; 38 return NULL; 39 } 40 if(moduleName == "") 41 { 42 OSG_ALWAYS << "ERROR - util::getModuleXMLConfig() : Invalid Module Filename!" << std::endl; 43 return NULL; 44 } 45 46 // It is a valid XML document? 47 doc = xmlReadFile(configFilename.c_str(), NULL, 0); 48 if (doc == NULL) 49 { 50 OSG_ALWAYS << "ERROR - util::getModuleXMLConfig() : " << configFilename << " is not a valid XML file!" << std::endl; 51 return NULL; 52 } 53 54 // Get the root element node 55 root_element = xmlDocGetRootElement(doc); 56 57 // Check if it is an osgVisual configuration file 58 std::string node_name=reinterpret_cast<const char*>(root_element->name); 59 if(!(root_element->type == XML_ELEMENT_NODE && node_name == "osgvisualconfiguration")) 60 { 61 OSG_ALWAYS << "ERROR - util::getModuleXMLConfig() : " << configFilename << " is not an osgVisual configuration file!" << std::endl; 62 return NULL; 63 } 64 65 // If file is a valid osgVisual config file, check all the root xml node and all of it's children of osgvisualconfiguration for the specified module 66 xmlNode* tmpNode = checkXMLNodeChildrenForModule(root_element, moduleName); 67 68 if( !tmpNode ) // if no valid node was found: clena up. Otherwise: the caller has to clean up. 69 { 70 xmlFreeDoc(doc); // free the document 71 xmlCleanupParser(); // Free the global variables that may have been allocated by the parser. 72 return NULL; 73 } 74 else 75 return tmpNode; 76 77 } 78 79 xmlNode* util::checkXMLNodeChildrenForModule(xmlNode* node, std::string moduleName) 80 { 81 for (xmlNode *cur_node = node; cur_node; cur_node = cur_node->next) // iterate through all elements 82 { 83 // Is the node the one we are searching for? 84 if (cur_node->type == XML_ELEMENT_NODE) 85 { 86 std::string node_name=reinterpret_cast<const char*>(cur_node->name); 87 if (node_name == "module") 88 { 89 OSG_DEBUG << "XML node module found" << std::endl; 90 return cur_node; 91 } 92 else // Otherwise: check its children.. 93 { 94 xmlNode* tmp_XmlNode = checkXMLNodeChildrenForModule(cur_node->children, moduleName); 95 if(tmp_XmlNode) 96 return tmp_XmlNode; 97 } 98 } // IF NODE TYPE = ELEMENT END 99 100 // Proceed with next node in this loop. 101 } 27 102 } 28 103
Note: See TracChangeset
for help on using the changeset viewer.