예제 #1
0
// The original Events list was created to exchange data from RAD with
// other tools, such as INCC.  A columnar text file was defined, where the
// first row in the file representing the columns and titles.
// The RADEventsXML class maintains an array of strings, indexed by the
// type RADEventField, declaring the same column titles. These titles
// are represented in the XML document processed by the class.
//
// Returns:
//	IXMLDOMElement: the constructed Columns node,
//	or a NULL pointer if processing failed.
//
///////////////////////////////////////////////////////
IXMLDOMElement* RADEventsXML::ConstructColumnsNode()
{
	IXMLDOMElement *pColumns = NULL;
	IXMLDOMElement *pTitle = NULL;
	IXMLDOMNode *pIXMLDOMNode = NULL;

	_bstr_t bstr1;
	_bstr_t bstr2;
	HRESULT hr = 0;

	try
	{
		// create <Columns>
		bstr1 = "Columns";
		hr = m_pXMLDom->createElement(bstr1,&pColumns);
		TESTHR(hr);
		AddWhiteSpaceToNode(bstr_wsnt, pColumns);

		// for each title element
		//	create <Title>value</Title>
		bstr2 = "Title";
		for (int i = 0; i < eRADAttMax; i++)
		{
			pTitle = NULL;
			//	create <Title>value</Title> 
			hr = m_pXMLDom->createElement(bstr2,&pTitle);
			TESTHR(hr);

			bstr1 = RADEventsList::Titles[i];
			hr = pTitle->put_text(bstr1); 
			TESTHR(hr);

			//  append it as a child to <Columns>
			hr = pColumns->appendChild(pTitle, &pIXMLDOMNode); 
			TESTHR(hr);
			AddWhiteSpaceToNode(bstr_wsnt, pColumns);
		}
	}
	catch(...)
	{
		dprintf( "%s:%d  HRCALL Failed: %s\n  0x%.8x = %s\n",
			__FILE__, __LINE__, "ConstructColumnsNode Exception" , hr);
	}
	return pColumns;
}
예제 #2
0
///////////////////////////////////////////////////////
// RADEventsXML::ConstructEventParentNodeTree
//
// Creates an XMLEvent node for the root of the XML document.
// The root node is named "IR",
// the Events container node is a child of "IR":
// <?xml version="1.0" ?>
//	<IR>
//		<Events>
//		</Events>
//	<IR>
//
//
// Returns:
//	IXMLDOMElement: the constructed IR/Eevents node,
//	or a NULL pointer if processing failed.
//
///////////////////////////////////////////////////////
IXMLDOMElement* RADEventsXML::ConstructEventParentNodeTree()
{
	IXMLDOMNode *pIXMLDOMNode = NULL;
	IXMLDOMElement *pIR = NULL;
	IXMLDOMElement *pEvents = NULL;
	IXMLDOMProcessingInstruction *pi=NULL;

	_bstr_t bstr1;
	_bstr_t bstr2;
	HRESULT hr;

	// Create a processing instruction element. <?xml version="1.0" ?>
	bstr1 = "xml";
	bstr2 = "version='1.0'";
	HRCALL(m_pXMLDom->createProcessingInstruction(
		bstr1,bstr2, &pi),
		"createProcessingInstruction:");
	m_pXMLDom->appendChild(pi, &pIXMLDOMNode);  // put it first

	// construct <IR><Events></Events></IR>
	bstr1 = "Events";
	HRCALL(m_pXMLDom->createElement(bstr1,&pEvents),"create <Events> ");

	bstr1 = "IR";
	HRCALL(m_pXMLDom->createElement(bstr1,&pIR),"create <IR>");

	HRCALL(pIR->appendChild(pEvents, &pIXMLDOMNode), ""); 
	AddWhiteSpaceToNode(bstr_wsnt, pIR);

	m_pXMLDom->appendChild(pIR, &pIXMLDOMNode);   // attach to DOM

clean: 
	if (pi)
		pi->Release();
	if (pIR)
		pIR->Release();
	return pEvents;
}