void CShootManagerSys::LoadShootSolutionSector(int iSector, LPCTSTR szFilename) { if(iSector >= m_ShootSolutionSectorArray.Num()) return; int i; MSXML2::IXMLDOMDocument2Ptr pDoc; pDoc.CreateInstance(__uuidof(DOMDocument40)); pDoc->load((_variant_t)szFilename); // 성공한 슛부터 로드한다. MSXML2::IXMLDOMNodeListPtr pNodeListSuccess = pDoc->selectNodes(L"root/success"); for(i=0; i<pNodeListSuccess->Getlength(); i++) { MSXML2::IXMLDOMNodePtr pNodeSuccess = pNodeListSuccess->Getitem(i); CShootSolution Solution; Solution.Create(pNodeSuccess, true, this); m_ShootSolutionSectorArray[iSector].first.push_back(Solution); } MSXML2::IXMLDOMNodeListPtr pNodeListFail = pDoc->selectNodes(L"root/fail"); for(i=0; i<pNodeListFail->Getlength(); i++) { MSXML2::IXMLDOMNodePtr pNodeFail = pNodeListFail->Getitem(i); CShootSolution Solution; Solution.Create(pNodeFail, false, this); m_ShootSolutionSectorArray[iSector].second.push_back(Solution); } pDoc.Release(); }
//设置指定xpath的节点值 BOOL CXmlBase::SetNodeValue(LPCTSTR lpszValue, LPCTSTR lpszXPath , MSXML2::IXMLDOMDocument2Ptr pDoc) { if (pDoc == NULL || lpszXPath == NULL) return FALSE; MSXML2::IXMLDOMNodeListPtr pNodeList = pDoc->selectNodes(lpszXPath); long lCnt = pNodeList->Getlength(); if (lCnt == 0) return FALSE; MSXML2::IXMLDOMNodePtr pNode = pNodeList->Getitem(0); return SetNodeValue(lpszValue, pNode); }
void readGeometry(dae_reader_t *reader, MSXML2::IXMLDOMDocument2Ptr xmlDoc) { MSXML2::IXMLDOMNodeListPtr nodeList; nodeList = xmlDoc->selectNodes("/r:COLLADA/r:library_geometries/r:geometry"); int count = nodeList->length; for (int i = 0; i < count; i++) { MSXML2::IXMLDOMNodePtr node = nodeList->Getitem(i); readMesh(reader, node); } }
void CShootManagerSys::LoadShootSolutionSector(int iSector, SFullName nameFile) { if(iSector >= m_ShootSolutionSectorArray.Num()) return; int i; MSXML2::IXMLDOMDocument2Ptr pDoc = NULL; DFileGPack packFile; packFile.Open(nameFile); CFileSys::LoadBinaryXML(pDoc, packFile.GetFile(), packFile.GetSize()); packFile.Close(); // 성공한 슛부터 로드한다. MSXML2::IXMLDOMNodeListPtr pNodeListSuccess = pDoc->selectNodes(L"root/success"); for(i=0; i<pNodeListSuccess->Getlength(); i++) { MSXML2::IXMLDOMNodePtr pNodeSuccess = pNodeListSuccess->Getitem(i); CShootSolution Solution; Solution.Create(pNodeSuccess, true, this); Solution.SetSectorIndex(iSector); m_ShootSolutionSectorArray[iSector].first.push_back(Solution); } MSXML2::IXMLDOMNodeListPtr pNodeListFail = pDoc->selectNodes(L"root/fail"); for(i=0; i<pNodeListFail->Getlength(); i++) { MSXML2::IXMLDOMNodePtr pNodeFail = pNodeListFail->Getitem(i); CShootSolution Solution; Solution.Create(pNodeFail, false, this); Solution.SetSectorIndex(iSector); m_ShootSolutionSectorArray[iSector].second.push_back(Solution); } CFileSys::UnloadXML(pDoc); }
MSXML2::IXMLDOMNodeListPtr CXmlBase::GetNodeListPtr(LPCTSTR lpszXPath , MSXML2::IXMLDOMDocument2Ptr pDoc) { MSXML2::IXMLDOMNodeListPtr pNodeList; CComBSTR bstrText; if (lpszXPath == NULL) { return NULL; } if (pDoc == NULL) { return NULL; } bstrText = _bstr_t(lpszXPath).GetBSTR(); pNodeList = pDoc->selectNodes(bstrText.m_str); return pNodeList; }
//设置指定xpath的节点属性 BOOL CXmlBase::SetAttrValue(LPCTSTR lpszValue, LPCTSTR lpszAttrName, LPCTSTR lpszXPath , MSXML2::IXMLDOMDocument2Ptr pDoc) { MSXML2::IXMLDOMNodePtr pNode = NULL; MSXML2::IXMLDOMNodeListPtr pNodeList = NULL; long lCnt = 0; if (pDoc == NULL || lpszXPath == NULL) return FALSE; try { pNodeList = pDoc->selectNodes(lpszXPath); lCnt = pNodeList->Getlength(); if (lCnt == 0) return FALSE; pNode = pNodeList->Getitem(0); } catch (_com_error e) { ::MessageBox(NULL, e.ErrorMessage(), NULL, MB_OK|MB_ICONERROR); return FALSE; } return SetAttrValue(lpszValue, lpszAttrName, pNode); }
void CShootManagerSys::LoadShootSolutionSet(SFullName nameFile) { int i; MSXML2::IXMLDOMDocument2Ptr pDoc = NULL; DFileGPack packFile; packFile.Open(nameFile); CFileSys::LoadBinaryXML(pDoc, packFile.GetFile(), packFile.GetSize()); packFile.Close(); // 시뮬레이터에서 사용하는 거리 범위들을 로드한다. MSXML2::IXMLDOMNodeListPtr pNodeListDistance; MSXML2::IXMLDOMNodePtr pNodeDistance; float fDistance; pNodeListDistance = pDoc->selectNodes(L"root/distance_range/distance"); for(i=0; i<pNodeListDistance->Getlength(); i++) { pNodeDistance = pNodeListDistance->Getitem(i); _bstr_t distance = pNodeDistance->GetnodeTypedValue(); sscanf((LPCTSTR)distance, "%f", &fDistance); m_DistanceList.push_back(fDistance); } // 시뮬레이터에서 사용하는 각도 범위들을 로드한다. // 여기서 각도는 (골대 - 슈터) 와 양의 z 축 사이의 각도를 말한다. // degree 로 저장되어 있으므로 Angle 로 변환시킨다. MSXML2::IXMLDOMNodeListPtr pNodeListAngle; MSXML2::IXMLDOMNodePtr pNodeAngle; float fDegree; int iAngle; pNodeListAngle = pDoc->selectNodes(L"root/angle_range/degree"); for(i=0; i<pNodeListAngle->Getlength(); i++) { pNodeAngle = pNodeListAngle->Getitem(i); _bstr_t degree = pNodeAngle->GetnodeTypedValue(); sscanf((LPCTSTR)degree, "%f", &fDegree); iAngle = Degree2Angle(fDegree); // degree 에서 Angle 로 변환한다. m_AngleList.push_back(iAngle); } // 전체 섹터 개수를 계산하고 여기에 맞게 메모리를 생성한다. int iNumSector = m_DistanceList.size() * (m_AngleList.size() + 1) + 6; for(i=0; i<iNumSector; i++) { ShootSolutionSector *pShootSolutionSector = new (m_ShootSolutionSectorArray) ShootSolutionSector; } // 각 섹터별로 섹터안의 Shoot Solution 들을 로드한다. MSXML2::IXMLDOMNodeListPtr pNodeListSector = pDoc->selectNodes(L"root/sector"); MSXML2::IXMLDOMNodePtr pNodeSector; MSXML2::IXMLDOMNodePtr pNodeIndex; MSXML2::IXMLDOMNodePtr pNodePath; for(i=0; i<pNodeListSector->Getlength(); i++) { pNodeSector = pNodeListSector->Getitem(i); pNodeIndex = pNodeSector->selectSingleNode(L"index"); pNodePath = pNodeSector->selectSingleNode(L"path"); _bstr_t index = pNodeIndex->GetnodeTypedValue(); _bstr_t path = pNodePath->GetnodeTypedValue(); SString strName = (LPCTSTR)path; DCutPath(strName); DCutFileExt(strName); strName[strName.Len()-3] = 'b'; int iIndex = atoi((LPCTSTR)index); LoadShootSolutionSector(iIndex, SFullName("simulator",strName)); // int iIndex = atoi((LPCTSTR)index); // SString sFilePath = szFilename; // sFilePath = DGetPathOnly(sFilePath); // sFilePath += "\\"; // sFilePath += (LPCTSTR)path; // sFilePath.Format("%s\\%s\\%s", g_szCurrentPath, g_szSimulatorPath, (LPCTSTR)path); // LoadShootSolutionSector(iIndex, (LPCTSTR)sFilePath); } CFileSys::UnloadXML(pDoc); }
void CShootManagerSys::LoadShootSolutionSet(LPCTSTR szFilename) { int i; MSXML2::IXMLDOMDocument2Ptr pDoc; pDoc.CreateInstance(__uuidof(DOMDocument40)); pDoc->load((_variant_t)szFilename); // 시뮬레이터에서 사용하는 거리 범위들을 로드한다. MSXML2::IXMLDOMNodeListPtr pNodeListDistance; MSXML2::IXMLDOMNodePtr pNodeDistance; float fDistance; pNodeListDistance = pDoc->selectNodes(L"root/distance_range/distance"); for(i=0; i<pNodeListDistance->Getlength(); i++) { pNodeDistance = pNodeListDistance->Getitem(i); _bstr_t distance = pNodeDistance->GetnodeTypedValue(); sscanf((LPCTSTR)distance, "%f", &fDistance); m_DistanceList.push_back(fDistance); } // 시뮬레이터에서 사용하는 각도 범위들을 로드한다. // 여기서 각도는 (골대 - 슈터) 와 양의 z 축 사이의 각도를 말한다. // degree 로 저장되어 있으므로 Angle 로 변환시킨다. MSXML2::IXMLDOMNodeListPtr pNodeListAngle; MSXML2::IXMLDOMNodePtr pNodeAngle; float fDegree; int iAngle; pNodeListAngle = pDoc->selectNodes(L"root/angle_range/degree"); for(i=0; i<pNodeListAngle->Getlength(); i++) { pNodeAngle = pNodeListAngle->Getitem(i); _bstr_t degree = pNodeAngle->GetnodeTypedValue(); sscanf((LPCTSTR)degree, "%f", &fDegree); iAngle = Degree2Angle(fDegree); // degree 에서 Angle 로 변환한다. m_AngleList.push_back(iAngle); } // 전체 섹터 개수를 계산하고 여기에 맞게 메모리를 생성한다. int iNumSector = m_DistanceList.size() * (m_AngleList.size() + 1) + 6; for(i=0; i<iNumSector; i++) { ShootSolutionSector *pShootSolutionSector = new (m_ShootSolutionSectorArray) ShootSolutionSector; } // 각 섹터별로 섹터안의 Shoot Solution 들을 로드한다. MSXML2::IXMLDOMNodeListPtr pNodeListSector = pDoc->selectNodes(L"root/sector"); MSXML2::IXMLDOMNodePtr pNodeSector; MSXML2::IXMLDOMNodePtr pNodeIndex; MSXML2::IXMLDOMNodePtr pNodePath; for(i=0; i<pNodeListSector->Getlength(); i++) { pNodeSector = pNodeListSector->Getitem(i); pNodeIndex = pNodeSector->selectSingleNode(L"index"); pNodePath = pNodeSector->selectSingleNode(L"path"); _bstr_t index = pNodeIndex->GetnodeTypedValue(); _bstr_t path = pNodePath->GetnodeTypedValue(); int iIndex = atoi((LPCTSTR)index); SString sFilePath = szFilename; sFilePath = DGetPathOnly(sFilePath); sFilePath += "\\"; sFilePath += (LPCTSTR)path; // sFilePath.Format("%s\\%s\\%s", g_szCurrentPath, g_szSimulatorPath, (LPCTSTR)path); LoadShootSolutionSector(iIndex, (LPCTSTR)sFilePath); } pDoc.Release(); }
bool Engine::LoadContent() { // Setup our SpriteBatch. m_pSpriteBatch = new DirectX::SpriteBatch(d3dContext_); m_pFont->Initialize(d3dDevice_, std::wstring(L"Calibri18.spritefont")); m_pSprite->Initialize(d3dDevice_, std::wstring(L"Test.dds"), 10.0f, 10.0f); m_textToDisplay = Text(); m_textToDisplay.Initialize(std::wstring(L"Sarah"), DirectX::SimpleMath::Vector2(200.0f, 200.0f)); try { MSXML2::IXMLDOMDocument2Ptr xmlDoc; HRESULT hr = xmlDoc.CreateInstance(__uuidof(MSXML2::DOMDocument60), NULL, CLSCTX_INPROC_SERVER); teamStats.InitializeTeam("Players.xml"); // Make sure the file was loaded correctly before trying to load the players. if (xmlDoc->load("Players.xml") == VARIANT_TRUE) { //xmlDoc->setProperty("SelectionLanguage", "XPath"); //teamStats.LoadPlayers(xmlDoc); } if (xmlDoc->load("input.xml") != VARIANT_TRUE) { DXTRACE_MSG("Unable to load input.xml\n"); xmlDoc->save("input.xml"); //xmlDoc-> } else { DXTRACE_MSG("XML was successfully loaded \n"); xmlDoc->setProperty("SelectionLanguage", "XPath"); MSXML2::IXMLDOMNodeListPtr wheels = xmlDoc->selectNodes("/Car/Wheels/*"); DXTRACE_MSG("Car has %u wheels\n", wheels->Getlength()); DXTRACE_MSG(wheels->Getitem(0)->text); //ptr-> MSXML2::IXMLDOMNodePtr node; node = xmlDoc->createNode(MSXML2::NODE_ELEMENT, ("Engine"), ("")); node->text = ("Engine 1.0"); xmlDoc->documentElement->appendChild(node); hr = xmlDoc->save("output.xml"); if (SUCCEEDED(hr)) { DXTRACE_MSG("output.xml successfully saved\n"); } } } catch (_com_error &e) { DXTRACE_MSG(e.ErrorMessage()); } return true; }