/////////////////////////////////////////////////////// // RADEventsXML::ConstructEventNode // // Creates an XMLEvent node from a RADEvent object // // An example XML node as text: // <Event num="0057" // starttime="0000020010826175602000" endtime="0000020010826175827000" // maxtime="0000020010826175702000" // sum="10941.0" maxvalue="84" // starttimedisplay="2001.08.26 - 17:56:02" // endtimedisplay="2001.08.26 - 17:58:27" // maxtimedisplay="2001.08.26 - 17:57:02" // etype="Channel" // stationname="GRAND 2" /> // // Note: the text attribute values are created from the strings // on the RADEvent object. // // Input: // pEvent - the RADEvent instance // // Returns: // IXMLDOMElement: the constructed Event node, // or a NULL pointer if processing failed. // /////////////////////////////////////////////////////// IXMLDOMElement* RADEventsXML::ConstructEventNode(RADEvent* pEvent) { IXMLDOMElement *pEventElement = NULL; _variant_t var1; _bstr_t bstr1; HRESULT hr; IXMLDOMAttribute *pAttNode=NULL; IXMLDOMNode *pIXMLDOMNode=NULL; IXMLDOMNamedNodeMap* pAttMap = NULL; int j; // construct <Event> bstr1 = "Event"; HRCALL(m_pXMLDom->createElement(bstr1,&pEventElement),"create <Event> "); HRCALL(pEventElement->get_attributes(&pAttMap), "get_attributes: "); for (j = 0; j < eRADAttMax; j++) { var1 = pEvent->values[j]; HRCALL(m_pXMLDom->createAttribute(atts[j], &pAttNode), "create attribute"); HRCALL(pAttNode->put_nodeValue(var1), "node value"); HRCALL(pAttMap->setNamedItem(pAttNode, &pIXMLDOMNode), "set named item"); if (pIXMLDOMNode) pIXMLDOMNode->Release(); } clean: if (pAttMap) pAttMap->Release(); if (pAttNode) pAttNode->Release(); return pEventElement; }
/* 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; }