/* Function name : CXML::CreateCommentNode Description : This helper function creates a comment for the node supplied as argumnet Return type : bool Argument : IXMLDOMNode **pParentNode Argument : CString csComment */ bool CXML::CreateCommentNode(IXMLDOMNode **ppParentNode,CString &rcsComment) { if(rcsComment.IsEmpty()) return false; if(!(*ppParentNode)) return false; IXMLDOMNode * pNode = NULL; _variant_t vtNodeType((long)VT_I4,NODE_COMMENT); _bstr_t bstrNameSpace(""); m_hr = m_pXMLDoc->createNode(vtNodeType,bstrNameSpace,bstrNameSpace,&pNode); if(!SUCCEEDED(m_hr)) return false; _variant_t vtComment(rcsComment); m_hr = pNode->put_nodeValue(vtComment); if(!SUCCEEDED(m_hr)) { pNode->Release(); return false; } IXMLDOMNode * pINewNode = NULL; bool bRet = AddNode(&m_pICurrentNode,&pNode,&pINewNode,NODE_COMMENT); if(pNode) pNode->Release(); if(pINewNode) pINewNode->Release(); return bRet; }
/* Function name : CXML::CreateAttributeNode Description : Return type : bool Argument : IXMLDOMNode **pParentNode Argument : CString csAttribute Argument : CString csValue Tested : Ok */ bool CXML::CreateAttributeNode(IXMLDOMNode **pParentNode,CString csAttribute,CString csValue) { IXMLDOMNode * pNode = NULL; if(csAttribute.IsEmpty()) return false; if(!(*pParentNode)) return false; _variant_t vtNodeType((long)NODE_ATTRIBUTE); _bstr_t bstrName(csAttribute); _bstr_t bstrNameSpace(""); m_hr = m_pXMLDoc->createNode(vtNodeType,bstrName,bstrNameSpace,&pNode); if(!SUCCEEDED(m_hr)) return false; IXMLDOMNamedNodeMap * pAttributes = NULL; m_hr = (*pParentNode)->get_attributes(&pAttributes); if(!SUCCEEDED(m_hr) || !pAttributes) { pNode->Release(); return false; } IXMLDOMNode *pNewNode = NULL; m_hr = pAttributes->setNamedItem(pNode,&pNewNode); pNode->Release(); pAttributes->Release(); if(!SUCCEEDED(m_hr) || !pNewNode) return false; _variant_t vtValue(csValue); m_hr = pNewNode->put_nodeValue(vtValue); pNewNode->Release(); if(!SUCCEEDED(m_hr) || !pNewNode) return false; return true; }
HRESULT CKADmerge::SetValueByPattern(string sElementPattern, string sAttributePattern, string sValue, string sLogFile) { HRESULT hRes = 0; if(sLogFile != "") { // open log file OpenLog(sLogFile, sDescription + " " + m_sFileName); } IXMLDOMNode * pElemNode = NULL; IXMLDOMNode * pAttrNode = NULL; _bstr_t bElementPattern(sElementPattern.c_str()); try { // get element node hRes = m_pXMLKad->selectSingleNode(bElementPattern, &pElemNode); if(hRes == S_FALSE) { hRes = S_FALSE; throw string("node access error"); } if(sAttributePattern.length()) { // get attribute node by pattern string _bstr_t bAttributePattern(sAttributePattern.c_str()); hRes = pElemNode->selectSingleNode(bAttributePattern, &pAttrNode); if(hRes == S_FALSE) { throw string("node access error"); } // set attribute value _bstr_t bAttlanguage(sValue.c_str()); VARIANT vAttlanguage; vAttlanguage.vt = VT_BSTR; V_BSTR(&vAttlanguage) = bAttlanguage.copy(); hRes = pAttrNode->put_nodeValue(vAttlanguage); VariantClear(&vAttlanguage); } else { // set element value hRes = SetValue(pElemNode, sValue); } if(hRes == S_OK) { SaveXMLFile(m_sFileName, m_pXMLKad); // log changes Log("SetValueByPattern - Set value succeeded: Element '" + sElementPattern + " - Attribute " + sAttributePattern + "' to: " + sValue); } //delete pwAttlanguage; if(FAILED(hRes)) { hRes = S_FALSE; throw string("value error"); } } catch(string str) { hRes = S_FALSE; // log changes Log("SetValueByPattern - Set value failed: Element '" + sElementPattern + " - Attribute " + sAttributePattern + "' to: " + sValue); Log("ERROR: " + str); } if(pElemNode != NULL) pElemNode->Release(); if(pAttrNode != NULL) pAttrNode->Release(); // close log file CloseLog(); return hRes; }