HRESULT XMLHelper::CreateNode(MSXML2::IXMLDOMDocument2 *doc, MSXML2::IXMLDOMNode *parent, MSXML2::IXMLDOMNode **newNode, const TCHAR *name) { HRESULT hr = S_OK; bool release = false; if(!parent) { MSXML2::IXMLDOMElement *element = 0; hr = doc->get_documentElement(&element); if(hr == S_OK) { hr = element->QueryInterface(IID_IXMLDOMNode, reinterpret_cast<void **>(&parent)); } release = true; } if(hr == S_OK && parent) { hr = XMLHelper::CreateChild(parent, newNode, name); } if(release) { parent->Release(); parent = 0; } return hr; }
MSXML2::IXMLDOMNode * RecurrenceManager::GetRecurrencesNode() { MSXML2::IXMLDOMNode *pNode = 0; MSXML2::IXMLDOMElement *pRoot = 0; HRESULT hr = m_pXMLDoc->get_documentElement(&pRoot); BSTR xpath = SysAllocString(_T("//recurrences")); hr = m_pXMLDoc->selectSingleNode(xpath, reinterpret_cast<MSXML2::IXMLDOMNode **>(&pNode)); SysFreeString(xpath); if(hr == S_FALSE) { MSXML2::IXMLDOMNode *pRootNode = 0; pRoot->QueryInterface(IID_IXMLDOMNode, reinterpret_cast<void **>(&pRootNode)); XMLHelper::CreateChild(pRootNode, &pNode, _T("recurrences")); pRootNode->Release(); } pRoot->Release(); return pNode; }