// 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; }
/////////////////////////////////////////////////////// // 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; }