xerces-c++ 修改节点
来源:互联网 发布:淘宝卖家需求 编辑:程序博客网 时间:2024/05/16 05:26
#include <syslog.h>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/framework/LocalFileFormatTarget.hpp>
using namespace xercesc;
class XMLReader
{
public:
XMLReader(): m_configFileParser(NULL), m_rootNode(NULL) { };
~XMLReader();
bool Initialize()
{
try
{
XMLPlatformUtils::Initialize();
}
catch( XMLException &e )
{
char *message = XMLString::transcode( e.getMessage() );
syslog(LOG_ERR, "XML toolkit initialization error: %s", message);
XMLString::release( &message );
return false;
}
m_rootNode = XMLString::transcode("beans");
m_configFileParser = new XercesDOMParser;
return true;
};
void readConfigFile(const char *);
private:
xercesc::XercesDOMParser *m_configFileParser;
XMLCh* m_rootNode;
};
XMLReader::~XMLReader()
{
try
{
delete m_configFileParser;
m_configFileParser = NULL;
XMLString::release( &m_rootNode );
}
catch( ... )
{
syslog(LOG_ERR, "Unknown exception encountered in TagNamesdtor");
}
try
{
XMLPlatformUtils::Terminate();
}
catch( xercesc::XMLException& e )
{
char *message = xercesc::XMLString::transcode( e.getMessage() );
syslog(LOG_ERR, "XML ttolkit teardown error: %s" , message);
XMLString::release( &message );
}
}
void XMLReader::readConfigFile(const char *configFile)
{
m_configFileParser->setValidationScheme( XercesDOMParser::Val_Never );
m_configFileParser->setDoNamespaces( false );
m_configFileParser->setDoSchema( false );
m_configFileParser->setLoadExternalDTD( false );
try
{
m_configFileParser->parse( configFile );
DOMDocument* xmlDoc = m_configFileParser->getDocument();
DOMElement* elementRoot = xmlDoc->getDocumentElement();
if( !elementRoot )
{
syslog(LOG_ERR, "empty document!");
};
XMLCh *sslContextTag = XMLString::transcode("sslContext");
//DOMNodeList *elementRoot = xmlDoc->getElementsByTagName(sslContextTag);
DOMNodeList *children = xmlDoc->getElementsByTagName(sslContextTag); //elementRoot->getChildNodes();
const XMLSize_t nodeCount = children->getLength();
XMLCh *keyStore = XMLString::transcode("keyStore");
XMLCh *keyStoreTag = XMLString::transcode("keyStorePassword");
XMLCh *trustStoreTag = XMLString::transcode("trustStorePassword");
for( XMLSize_t xx = 0; xx < nodeCount; ++xx )
{
DOMNode* currentNode = children->item(xx);
if( currentNode->getNodeType() == DOMNode::ELEMENT_NODE )
{
DOMElement* currentElement = dynamic_cast< xercesc::DOMElement* >( currentNode );
if( XMLString::equals(currentElement->getTagName(), sslContextTag) && currentElement->hasAttribute(keyStore))
{
XMLCh *xmlch_pass = XMLString::transcode("password");
currentElement->setAttribute(keyStoreTag , xmlch_pass);
currentElement->setAttribute(trustStoreTag, xmlch_pass);
XMLString::release(&xmlch_pass);
break;
}
}
}
XMLString::release( &sslContextTag );
XMLString::release( &keyStore );
XMLString::release( &keyStoreTag );
XMLString::release( &trustStoreTag );
const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull };
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(gLS);
DOMWriter* theSerializer = ((DOMImplementationLS*)impl)->createDOMWriter();
if (theSerializer->canSetFeature(XMLUni::fgDOMXMLDeclaration,true) )
{
theSerializer->setFeature(XMLUni::fgDOMXMLDeclaration, true);
}
const char *outputXMLName = "test.xml";
XMLFormatTarget *localFormTarget = new LocalFileFormatTarget(outputXMLName);
try{
theSerializer->writeNode(localFormTarget, *xmlDoc);
}
catch(...){
syslog(LOG_ERR,"error");
}
delete localFormTarget;
}
catch( xercesc::XMLException& e )
{
char* message = xercesc::XMLString::transcode( e.getMessage() );
syslog(LOG_ERR, "Error parsing file: %s" , message);
XMLString::release( &message );
}
}
#ifdef MAIN_TEST
/* This main is provided for unit test of the class. */
int main()
{
const char *configFile ="activemq.xml";
XMLReader appConfig;
appConfig.Initialize();
appConfig.readConfigFile(configFile);
return 0;
}
#endif
- xerces-c++ 修改节点
- 请问如何用xerces读取XML文件(dom c++),修改部分节点名称、属性后,保存为另一个文件或者替换现有文件。
- xerces-c编码示例
- xerces-c-2.7下载编译
- 学习xerces-c使用中
- xerces-c和icu编译
- xerces-c-2.7下载地址
- Xerces-C++ 参考
- xerces-c 解析xml schema
- Xerces-C++ 参考
- xerces
- 充分利用 Xerces-C++,第 1 部分
- 充分利用 Xerces-C++,第 2 部分
- xerces-c解析中文的简单方法
- 充分利用 Xerces-C++,第 1 部分
- 充分利用 Xerces-C++,第 2 部分
- linux安装xml开发包xerces-c
- 充分利用 Xerces-C++,第 1 部分
- 事件冒泡与事件捕获
- 1. Two Sum
- 江苏省大学生程序设计竞赛(JSCPC)赛后感
- Java NIO 理解
- 我的编程知识体系
- xerces-c++ 修改节点
- [CSAPP笔记][第二章信息的表示和处理]
- 算法训练 JAM计数法
- css3实现 鼠标移上图片 放大遮罩效果
- linux安装jre
- 为何使用Asp.net开发,部署我却选择Apache而不用IIS
- c++作业5
- 动态代理模式
- Yii2.0 RESTful Web服务(3)