예제 #1
0
///////////////////////////////////////////////////////
// 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;
}