////////////////////////////////////////////////////////////////////////////////// // Function: xml_get_child_tag // Gets the position of the child tag. // XmlNode CXmlDocument::GetChildNode(XmlNode node, char* szTag) { char szCurrentTag[32]; char* szChildTag; // get parent node tag strcpy(szCurrentTag,GetNodeTag(node)); // get child node node = GetNextNode(node); while (node>0) { // get child node tag szChildTag = GetNodeTag(node); // does the child's tag match the one we're looking for if ( !strcmpi(szChildTag,szTag) ) return node; // is this actually the parent's closing tag? else if ( !strcmpi(&szChildTag[1],szCurrentTag) ) return 0; node = GetNextNode(node); } return 0; }
void CXmlDocument::EnumerateNodes(char* szTag, XmlNodeCallback pFunc) { char* szCurrentTag; XmlNode node; node = GetNextNode(XML_ROOT_NODE); while (node>0) { szCurrentTag = GetNodeTag(node); if ( !strcmpi(szCurrentTag,szTag) ) pFunc(szTag,node); node = GetNextNode(node); } }
int CXmlDocument::GetNodeCount(char* szTag) { m_nodes = 0; char* szCurrentTag; XmlNode node; node = GetNextNode(XML_ROOT_NODE); while (node>0) { szCurrentTag = GetNodeTag(node); if ( !strcmpi(szCurrentTag,szTag) ) m_nodes++; node = GetNextNode(node); } return m_nodes; }
HRESULT CSkin::Create(CHAR* szXmlFile) { if (CXmlDocument::Load(szXmlFile)<0) { OutputDebugString("\nUnable to load xml file.\n"); return E_FAIL; } XmlNode xnNode = GetNextNode(XML_ROOT_NODE); while (xnNode>0) { CHAR* szCurrentTag = GetNodeTag(xnNode); if ( !strcmpi(szCurrentTag,"mode") ) { CMode* pNewMode = new CMode; if (SUCCEEDED(pNewMode->Create(this,xnNode))) { OutputDebugString("Enumerated mode: "); OutputDebugString(pNewMode->ToString().c_str()); OutputDebugString("\n"); m_modes[pNewMode->ToString()] = pNewMode; XmlNode xnDefaultMode; if (xnDefaultMode = GetChildNode(xnNode,"default")) { if ( !strcmpi(GetNodeText(xnDefaultMode),"true") ) m_pDefaultMode = pNewMode; } } else { delete pNewMode; } } xnNode = GetNextNode(xnNode); } return S_OK; }