`

Xerces-C++学习之——创建XML文档 (转)

 
阅读更多
代码如下:
/*
* ===========================================================================
*
* 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 <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>
#include <xercesc/framework/MemBufFormatTarget.hpp>
#include <xercesc/framework/StdOutFormatTarget.hpp>
#include <xercesc/framework/MemBufInputSource.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>

#include <string>

#if defined(XERCES_NEW_IOSTREAMS)
#include <iostream>
#else
#include <iostream.h>
#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 =
"<basic>"
"<corp_name>abcd</corp_name>"
"<corp_code></corp_code>"
"<c0></c0>"
"<short_name></short_name>"
"<calling_code></calling_code>"
"<legal_representative></legal_representative>"
"<address></address>"
"<zip></zip>"
"<telephone></telephone>"
"<fax></fax>"
"<contact></contact>"
"<proportion_code></proportion_code>"
"<logo_crc></logo_crc>"
"<employee_portrait_crc></employee_portrait_crc>"
"<group_portrait_crc></group_portrait_crc>"
"<createtime></createtime>"
"<opentime></opentime>"
"<province_code></province_code>"
"<vgop_code></vgop_code>"
"<org_version></org_version>"
"<source_code></source_code>"
"<client_dept_version></client_dept_version>"
"<version_id></version_id>"
"<contact_mp></contact_mp>"
"</basic>";

std::string rules_string =
"<rules>"
"<order_flag></order_flag>"
"<demo_flag></demo_flag>"
"<useroperate_limit></useroperate_limit>"
"<emp_portrait_flag></emp_portrait_flag>"
"<iplmt></iplmt>"
"<dept_auth_switch></dept_auth_switch>"
"<sms_block></sms_block>"
"<sms_begin></sms_begin>"
"<sms_end></sms_end>"
"<edit_status></edit_status>"
"<expire_time></expire_time>"
"</rules>";

std::string accounts_string =
"<accounts>"
"<scale_code></scale_code>"
"<customer_manager></customer_manager>"
"<manager_phone></manager_phone>"
"<deposit_bank></deposit_bank>"
"<bank_accounts></bank_accounts>"
"<password_paper_id></password_paper_id>"
"<group_code></group_code>"
"<sms_code></sms_code>"
"<meeting_code></meeting_code>"
"<fee_code></fee_code>"
"<cycle_code></cycle_code>"
"<sharedisk_code></sharedisk_code>"
"<sp_status></sp_status>"
"<updatetime></updatetime>"
"</accounts>";

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("http://www.w3.org/2001/XMLSchema-instance"));
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;
}
<!-- <div class="Blog_con3_1">管理员在2009年8月13日编辑了该文章文章。</div> -->
分享到:
评论

相关推荐

    xerces-c-3.2.3.zip

    Xerces-C++是Apache软件基金会的一个重要项目,它是一款高效且可移植的XML文档解析器,支持多种编程语言,其中包括我们这里的焦点——C++。标题中的"xerces-c-3.2.3.zip"指示的是Xerces-C++的3.2.3版本,专为64位...

    xerces-c-3.1.1-x86-windows-vc-10.0

    Xerces-C++是一个开源的XML解析器,它实现了W3C的DOM、SAX和XML Schema接口,用于处理XML文档。 描述中提到的"Xerces-c linux gcc_3_4编译生成dll"可能是指另一个版本的Xerces-C++,这个版本是在Linux环境下,使用...

    xerces-c++-3.1.3

    Xerces-C++ 的前身是 IBM 的 XML4C 项目。XML4C 和 XML4J 是两个并列的项目,而 XML4J 是 Xerces-J——Java 实现——的前身。IBM 将这两个项目的源代码让与 Apache 软件基金会(Apache Software Foundation),他们将...

    Xerces-J-tools.2.11.0-xml-schema-1.1-beta.zip下载

    Xerces-C++ 的前身是 IBM 的 XML4C 项目。XML4C 和 XML4J 是两个并列的项目,而 XML4J 是 Xerces-J——Java 实现——的前身。IBM 将这两个项目的源代码让与 Apache 软件基金会(Apache Software Foundation),他们将...

    Xerces-c++指南

    2. DOM Level 3支持:Xerces-C++ 2.8.0包含了W3C DOM Level 3的部分实现,详情请查看文档DOM Level 3 Support。 3. 访问DOM API:在程序代码中访问DOM API需要包含头文件,其中包含了DOM API类所需要的全部头文件。...

    xerces-c-3.0.0-x86_64-windows-vc-9.0.rar

    xerces-c-3.0.0 编译好的库,可以直接... 这两个项目是 Apache XML 组的核心项目(如果看到的是“Xerces-C”而不是“Xerces-C++”,也是同一个东西,因为这个项目一开始就是用 C(译者注:原文为C++)语言编写的)。

    xerces-c-3.2.3.tar.gz

    Xerces-C++是Apache软件基金会开发的一个开源XML解析库,它实现了W3C的DOM(文档对象模型)、SAX(简单API for XML)和XInclude规范。在这个特定的版本“xerces-c-3.2.3.tar.gz”中,我们看到的是一个针对C++编程...

    xerces-c-3.1.1

    Xerces-C++,这个在软件开发领域中被广泛使用的开源库,版本号3.1.1,是处理XML文档的强大工具,尤其在Ambulant项目中发挥了重要作用。它的主要功能是解析XML文档,将XML数据转换为程序可以操作的对象,同时也支持...

    xerces-c-3.1.1-x86_64-linux-gcc-3.4.tar.gz

    总的来说,Xerces-C++是Linux开发者处理XML文档的强大工具,它的高效、稳定和易用性使其成为XML解析领域的首选库之一。通过深入理解和熟练运用,开发者可以构建出高效、可靠、适应性强的XML处理应用程序。

    xerces-c2_2_0-win32.zip_xerces_xerces-c_2_xml parser

    而Xerces-C++则是实现XML解析的关键工具,它能够将XML文档转换成易于处理的数据结构,使开发者可以轻松地访问和操作XML文档中的内容。 Xerces-C++ 2.0版是该库的一个早期但稳定版本,支持XML 1.0规范。它包含了完整...

    xerces-c-3.1.1-x86-windows-vc-9.0.zip

    - **DOM(Document Object Model)**: Xerces-C++实现了W3C DOM Level 2 Core和Level 3 Core规范,提供了一种树型结构来表示XML文档,使得开发者可以方便地遍历、修改或创建XML文档。 - **SAX(Simple API for XML...

    xerces-c-src1_7_0.zip

    "xerces-c-src1_7_0.zip" 文件是Xerces-C++ 1.7.0版本的源代码包,对于学习和研究XML解析机制以及C++编程具有极高的价值。本文将深入探讨Xerces-C++ 的核心功能、设计原则以及如何通过源码理解其实现。 一、Xerces-...

    Xerces-C++

    通过阅读和学习《Xerces-C++ DOM编程指南》,开发者可以深入理解如何利用Xerces-C++ 库来构建XML处理应用,无论是读取XML配置文件,还是构建复杂的XML数据处理系统,都能游刃有余。提供的文档如`Xerces-C++_DOM(1)....

    xerces-c-src_2_8_0.tar.gz

    首先,我们来看Xerces-C++的核心功能——XML解析。Xerces-C++支持XML 1.0和1.1标准,能够解析XML文档并将其转换为内存中的数据结构。它的解析过程分为两个主要阶段:词法分析和语法分析。词法分析将XML文档分解为一...

    xerces-c-3.1.3

    Xerces-C++ 是一个开源的XML解析器,版本号为3.1.3,它由Apache软件基金会开发并维护,是XML处理领域的重要工具之一。Xerces-C++ 的设计目标是提供高效、可移植且功能强大的XML解析服务,它支持XML Schema、XPath、...

    xerces-c-src_2.6.0.rar_XML解析_linux xml_xerces_2_6 linux_xml解析 c+

    Xerces-C++是Apache软件基金会开发的一个纯C++实现的XML解析器,它基于SAX(Simple API for XML)和DOM(Document Object Model)两种解析模式,能够高效地处理XML文档。Xerces-C++ 2.6.0版本是本文讨论的重点,该...

    xerces-c-src_2_7_0库和头文件

    Xerces-C++的强大之处在于其对XML标准的全面支持,包括DTD、XML Schema、命名空间、实体引用、XPath和XSLT等。它还提供了多种解析模式,如SAX(Simple API for XML)和DOM(Document Object Model),满足不同性能和...

    demo_of_xerces-c++_MemoryManagement

    Xerces-C++是一个强大的XML解析库,它为开发者提供了处理XML文档的高效工具。在处理大型XML数据时,内存管理显得尤为重要,因为它直接影响到程序的性能和稳定性。本篇将深入探讨Xerces-C++中的内存管理机制,以及...

    xerces-c-src1_6_0.tar.gz_ xerces_XML解析_apache_xerces_xml parser

    而Xerces-C++则是Apache软件基金会开发的一款开源、跨平台的XML解析器,它为C++开发者提供了一套强大的工具来处理XML文档。本文将深入探讨Xerces-C++的特性、工作原理以及其在Apache项目中的应用。 首先,Xerces-...

Global site tag (gtag.js) - Google Analytics