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