代码如下:
/*
* ===========================================================================
*
* Filename: CreateXML.cpp
*
* Description: This is an example of the use of Xerces-C++ operation XML.
*
* Version: 1.0
* Created: 02/28/2010 11:48:26 AM
* Revision: none
* Compiler: gcc
*
* Author: huabo (caodaijun), caodaijun@feinno.com
* Company: feinno
*
* ===========================================================================
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#if defined(XERCES_NEW_IOSTREAMS)
#include
#else
#include
#endif
XERCES_CPP_NAMESPACE_USE
class XStr
{
public:
XStr(const char* const toTranscode)
{
fUnicodeForm = XMLString::transcode(toTranscode);
}
~XStr()
{
XMLString::release(&fUnicodeForm);
}
const XMLCh* unicodeForm() const
{
return fUnicodeForm;
}
private:
XMLCh* fUnicodeForm;
};
#define X(str) XStr(str).unicodeForm()
std::string basic_string =
""
"abcd"
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
"";
std::string rules_string =
""
""
""
""
""
""
""
""
""
""
""
""
"";
std::string accounts_string =
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
"";
int main(int argC, char*argV[])
{
// Initialize the XML4C2 system.
try
{
XMLPlatformUtils::Initialize();
}
catch(const XMLException& toCatch)
{
char *pMsg = XMLString::transcode(toCatch.getMessage());
XERCES_STD_QUALIFIER cerr << "Error during Xerces-c Initialization.\n"
<< " Exception message:"
<< pMsg;
XMLString::release(&pMsg);
return 1;
}
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(X("LS"));
DOMLSSerializer* theSerializer = ((DOMImplementationLS*)impl)->createLSSerializer();
DOMLSOutput *theOutputDesc = ((DOMImplementationLS*)impl)->createLSOutput();
MemBufFormatTarget* target = new MemBufFormatTarget();
theOutputDesc->setByteStream(target);
if (impl != NULL)
{
try
{
DOMDocument* doc = impl->createDocument(
0, // root element namespace URI.
X("corporation"), // root element name
0); // document type object (DTD).
doc->setXmlStandalone(true);
DOMElement* rootElem = doc->getDocumentElement();
rootElem->setAttribute(X("xmlns"), X("com:cmcc:corporation"));
rootElem->setAttribute(X("xmlns:xsi"), X(""));
rootElem->setAttribute(X("xsi:schemaLocation"), X("com:cmcc:corporation corporation.xsd"));
//add node
DOMElement* prodElem = doc->createElement(X("eid"));
rootElem->appendChild(prodElem);
DOMText* prodDataVal = doc->createTextNode(X("100000"));
prodElem->appendChild(prodDataVal);
XercesDOMParser* parser = new XercesDOMParser();
//add basic child
MemBufInputSource* basic_mem = new MemBufInputSource(
(const XMLByte* )basic_string.c_str(),
strlen(basic_string.c_str()),
"basic",
false);
parser->parse( *basic_mem );
DOMDocument* xmlDoc = parser->getDocument();
DOMElement* basic_root = xmlDoc->getDocumentElement();
DOMNode* newnode = doc->importNode((DOMNode* )basic_root, true);
rootElem->appendChild(newnode);
delete basic_mem;
//add the rules child
MemBufInputSource* rules_mem = new MemBufInputSource(
(const XMLByte* )rules_string.c_str(),
rules_string.length(),
"rules",
false);
parser->parse( *rules_mem );
xmlDoc = parser->getDocument();
DOMElement* rules_root = xmlDoc->getDocumentElement();
newnode = doc->importNode((DOMNode* )rules_root, true);
rootElem->appendChild(newnode);
delete rules_mem;
//add the accounts child
MemBufInputSource* accounts_mem = new MemBufInputSource(
(const XMLByte* )accounts_string.c_str(),
accounts_string.length(),
"accounts",
false);
parser->parse( *accounts_mem );
xmlDoc = parser->getDocument();
DOMElement* accounts_root = xmlDoc->getDocumentElement();
newnode = doc->importNode((DOMNode* )accounts_root, true);
rootElem->appendChild(newnode);
delete accounts_mem;
theSerializer->write(doc, theOutputDesc);
std::cout<< target->getRawBuffer()<< std::endl;
delete target;
delete parser;
theOutputDesc->release();
theSerializer->release();
doc->release();
}
catch(const OutOfMemoryException&)
{
XERCES_STD_QUALIFIER cerr << "OutOfMemoryException" << XERCES_STD_QUALIFIER endl;
}
catch (const DOMException& e)
{
XERCES_STD_QUALIFIER cerr << "DOMException code is: " << e.code << XERCES_STD_QUALIFIER endl;
}
catch (...)
{
XERCES_STD_QUALIFIER cerr << "An error occurred creating the document" << XERCES_STD_QUALIFIER endl;
}
}
else
{
XERCES_STD_QUALIFIER cerr << "Requested implementation is not supported" << XERCES_STD_QUALIFIER endl;
}
XMLPlatformUtils::Terminate();
return 0;
}
阅读(4865) | 评论(0) | 转发(0) |