#include "BaseEntity.h" #include "ObjectManager.h" #include "CStr.h" // xerces XML stuff #include #include #include #include #include // Gee's custom error handler #include // automatically use namespace .. XERCES_CPP_NAMESPACE_USE bool CBaseEntity::loadXML( CStr filename ) { // I can only assume Rich knows what this does ;) bool parseOK = false; // Initialize XML library XMLPlatformUtils::Initialize(); { // Create parser instance XercesDOMParser *parser = new XercesDOMParser(); // Setup parser parser->setValidationScheme(XercesDOMParser::Val_Auto); parser->setDoNamespaces(false); parser->setDoSchema(false); parser->setCreateEntityReferenceNodes(false); // Set customized error handler CXercesErrorHandler *errorHandler = new CXercesErrorHandler(); parser->setErrorHandler(errorHandler); // Get main node LocalFileInputSource source( XMLString::transcode(filename) ); // Parse file parser->parse(source); // Check how many errors parseOK = parser->getErrorCount() == 0; if (parseOK) { // parsed successfully - grab our data DOMDocument *doc = parser->getDocument(); DOMElement *element = doc->getDocumentElement(); // root_name should be Object CStr root_name = XMLString::transcode( element->getNodeName() ); // should have at least 3 children - Name, ModelName and TextureName DOMNodeList *children = element->getChildNodes(); int numChildren=children->getLength(); for (int i=0; iitem(i); // A child element if (child->getNodeType() == DOMNode::ELEMENT_NODE) { // First get element and not node DOMElement *child_element = (DOMElement*)child; CStr element_name = XMLString::transcode( child_element->getNodeName() ); DOMNode *value_node= child_element->getChildNodes()->item(0); CStr element_value=value_node ? XMLString::transcode(value_node->getNodeValue()) : ""; if (element_name==CStr("Name")) { m_name = element_value; } else if (element_name==CStr("Actor")) { m_actorObject = g_ObjMan.FindObject( element_value ); } else if (element_name==CStr("Speed")) { m_speed = element_value.ToFloat(); } } } } delete parser; } XMLPlatformUtils::Terminate(); return parseOK; }