SCEW的目的是提供在XML围绕一个简单的接口
Expat解析器,以及用于创建新的XML的简单接口
文档。它提供的功能来加载和访问XML元素
而不需要每次都创建外籍事件处理例程
要加载一个新的XML文档。
这些是主要的SCEW特点:
- 使用新的或解析XML文档的DOM样的对象模型。
- 支持级联加载XML文档。
- 可以复制和比较完整的XML文档,元素或属性。
- 写XML文档到多个输出。
- 允许轻松添加新的I / O资源。
- UTF-8,ISO-8859-1和US-ASCII编码(和UTF-16在Windows中)。
项目主页:http://www.nongnu.org/scew/
SCEW是自由软件[0]。请参阅文件COPYING获取详细信息。
Expat解析器,以及用于创建新的XML的简单接口
文档。它提供的功能来加载和访问XML元素
而不需要每次都创建外籍事件处理例程
要加载一个新的XML文档。
这些是主要的SCEW特点:
- 使用新的或解析XML文档的DOM样的对象模型。
- 支持级联加载XML文档。
- 可以复制和比较完整的XML文档,元素或属性。
- 写XML文档到多个输出。
- 允许轻松添加新的I / O资源。
- UTF-8,ISO-8859-1和US-ASCII编码(和UTF-16在Windows中)。
项目主页:http://www.nongnu.org/scew/
SCEW是自由软件[0]。请参阅文件COPYING获取详细信息。
对于安装说明,请参阅INSTALL文件。
例子:
S32 Mp2pCfgInfoGet(Mp2pStackObj *pMp2pStackObj)
{
FILE *cfgFileHandle = NULL;
S8 getXMLStr[MAX_CFG_INFO_XML_LEN]={0};
S32 getXmlStrLen = -1;
/////////////////////////////////////////////////////////
scew_parser *pXmlParser = NULL; /*XML������*/
scew_tree *pNewXmlTree = NULL; /*XML��*/
scew_element *root = NULL;
scew_element *elementLevelOne = NULL;
XML_Char const *name = NULL;
XML_Char const *contents = NULL;
///////////////////////////////////////////////////////////////
//��ȡ�����ļ�
cfgFileHandle = fopen("../../comm/Mp2pConfig.xml" , "r+");
if(NULL == cfgFileHandle)
{
LOG_INFO(MOD_MP2P, "no config file: ../../comm/Mp2pConfig.xml\n");
RETVALUE(RERROR);
}
getXmlStrLen = fread(getXMLStr , 1 , MAX_CFG_INFO_XML_LEN , cfgFileHandle);
if (getXmlStrLen < 12)
{
LOG_ERR(MOD_MP2P, "No config information in ../../comm/Mp2pConfig.xml. err: %s\r\n", strerror(errno));
goto errFileRead;
}
/*����XML������*/
pXmlParser = scew_parser_create();
if (NULL == pXmlParser)
{
LOG_ERR(MOD_MP2P, "parser create failed.\r\n");
goto errParseCreate;
}
scew_parser_ignore_whitespaces(pXmlParser, 1);
/*װ��XML��*/
if (!scew_parser_load_buffer(pXmlParser, getXMLStr, getXmlStrLen))
{
LOG_ERR(MOD_MP2P, "xml string load failed. getXmlStrLen:%d\r\n", getXmlStrLen);
goto errLoadXmlStr;
}
/*����XML��*/
scew_parser_ignore_whitespaces(pXmlParser, 1);
pNewXmlTree = scew_parser_tree(pXmlParser);
if(NULL == pNewXmlTree)
{
LOG_ERR(MOD_MP2P, "xml string parse failed.\r\n");
goto errParseTree;
}
//�������ڵ�
root = scew_tree_root(pNewXmlTree);
if (NULL == root)
{
LOG_ERR(MOD_MP2P, "no root node.\r\n");
goto errParseElement;
}
elementLevelOne = scew_element_next(root , elementLevelOne);
while (NULL != elementLevelOne)
{
name = scew_element_name(elementLevelOne);
contents = scew_element_contents(elementLevelOne);
if(0 == strcmp(name , "HA"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_HA] = atoi(contents);
}
else if(0 == strcmp(name , "ICMS"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_ICMS] = atoi(contents);
}
else if(0 == strcmp(name , "NM"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_NM] = atoi(contents);
}
else if(0 == strcmp(name , "CTC"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_CTC] = atoi(contents);
}
else if(0 == strcmp(name , "CTL"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_CTL] = atoi(contents);
}
else if(0 == strcmp(name , "MSN"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_SMS] = atoi(contents);
}
else if(0 == strcmp(name , "GSLB"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_GSLB] = atoi(contents);
}
else if(0 == strcmp(name , "VCC"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_VCC] = atoi(contents);
}
else if(0 == strcmp(name , "HLC"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_HLC] = atoi(contents);
}
else if(0 == strcmp(name , "HLS"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_HLS] = atoi(contents);
}
else if(0 == strcmp(name , "OCMS"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_OCMS] = atoi(contents);
}
else if(0 == strcmp(name , "ONM"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_ONM] = atoi(contents);
}
else if(0 == strcmp(name , "OMS"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_OMS] = atoi(contents);
}
else if(0 == strcmp(name , "FLC"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_FLC] = atoi(contents);
}
else if(0 == strcmp(name , "FLS"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_FLS] = atoi(contents);
}
else if(0 == strcmp(name , "LTS"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_LTS] = atoi(contents);
}
else if(0 == strcmp(name , "HTS"))
{
pMp2pStackObj->m_sModDefaultSrvPort[MOD_CDN_HTS] = atoi(contents);
}
else
{
LOG_ERR(MOD_MP2P, "unkown element name %s\n", name);
}
//read next element
elementLevelOne = scew_element_next(root , elementLevelOne);
}
/*�ͷ�XML��*/
scew_tree_free(pNewXmlTree);
pNewXmlTree = NULL;
/*�ͷ�XML������*/
scew_parser_free(pXmlParser);
pXmlParser = NULL;
/*�ر����ݿ�����*/
if(NULL != cfgFileHandle)
{
fclose(cfgFileHandle);
cfgFileHandle = NULL;
}
RETVALUE(ROK);
errParseElement:
scew_tree_free(pNewXmlTree);
errParseTree:
errLoadXmlStr:
scew_parser_free(pXmlParser);
errParseCreate:
errFileRead:
if(NULL != cfgFileHandle)
{
fclose(cfgFileHandle);
cfgFileHandle = NULL;
}
RETVALUE(RERROR);
}