Listing 1

CClientXMLGen::CClientXMLGen() 
{
  try {
    XMLPlatformUtils::Initialize();
    m_doc = NULL;
  }
  catch(const XMLException& e) {
    char *pMsg = XMLString::transcode(e.getMessage());
    cerr << "Error during Xerces-c Initialization.\n"
         << "  Exception message:"
         << pMsg;
    XMLString::release(&pMsg);
  }
}
CClientXMLGen::~CClientXMLGen() 
{
  delete m_doc;
  XMLPlatformUtils::Terminate();
}
bool CClientXMLGen::CreateXMLDocument(Client* pClient)
{
  try {
    // Create a new XML DOM Document
    DOMImplementation* dom 
      = DOMImplementationRegistry
        ::getDOMImplementation(X("Core"));
    m_doc = dom->createDocument(
        NULL,        // namespace
        X("Client"), // root element name
        NULL);       // DTD.
    // Create root element and add the client 
    // details as child nodes with text nodes
    DOMElement* rootElem = m_doc->getDocumentElement();
    AddElem( rootElem, 
        X("LastName"), X(pClient->GetLastName()) );
    AddElem( rootElem, 
        X("FirstName"), X(pClient->GetFirstName()) );
    AddElem( rootElem, 
        X("Street"), X(pClient->GetStreet()) );
    AddElem( rootElem, 
        X("City"), X(pClient->GetCity()) );
    AddElem( rootElem, 
        X("Zip"), X(pClient->GetZip()) );
    AddElem( rootElem, 
        X("State"), X(pClient->GetState()) );
    // Create another element for the credit card information
    DOMElement* CreditCardElem 
        = m_doc->createElement( X("CreditCard") );
    rootElem->appendChild( CreditCardElem );
    AddElem( CreditCardElem, 
        X("Number"), 
        X(pClient->GetCreditCard()->GetCardNumber()) );
    AddElem( CreditCardElem, 
        X("Type"), 
        X(pClient->GetCreditCard()->GetCardType()) );
    AddElem( CreditCardElem, 
        X("Holder"), 
        X(pClient->GetCreditCard()->GetCardHolder()) );
    AddElem( CreditCardElem, 
        X("Expiration"), 
        X(pClient->GetCreditCard()->GetExpDate()) );
    return true;
  }
  catch (XMLException& e) {
    char *pMsg = XMLString::transcode(e.getMessage());
    cerr << "Exception when creating the Client XML:\n"
         << "  Exception message:"
         << pMsg;
    XMLString::release(&pMsg);
  }
    return false;
}
bool CClientXMLGen::SerializeXMLDocument( char* filename)
{
  try {
    if ( m_doc != NULL )
    {
      // Write the XML out as a file
      DOMImplementation* impl 
        = DOMImplementationRegistry
          ::getDOMImplementation(X("LS"));
      DOMWriter* serializer 
          = ((DOMImplementationLS*)impl)->createDOMWriter();
      serializer->setEncoding(NULL);
      XMLFormatTarget* target
          = new LocalFileFormatTarget( filename );
      // get the DOM representation
      serializer->writeNode(target, *m_doc);
      delete serializer;
      delete target;
      return true;
    }
  }
  catch (XMLException& e) {
        char *pMsg = XMLString::transcode(e.getMessage());
        cerr << "Exception when serializing the XML:\n"
             << "  Exception message:"
             << pMsg;
        XMLString::release(&pMsg);
    }
    return false;
}
void CClientXMLGen::AddElem(DOMElement* pRootElem, 
  const XMLCh * elemName, const XMLCh * elemVal)
{
    DOMElement* elem = m_doc->createElement( elemName );
    DOMText* text = m_doc->createTextNode( elemVal );
    elem->appendChild( text );
    pRootElem->appendChild( elem );
}