Example #1
0
HRESULT CombineMasterSlaveXmlParam(
    const char* szXmlParamMaster,
    const char* szXmlParamSlave,
    char* szXmlParamAll,
    DWORD32& dwLen
)
{
    TiXmlElement* pMasterRootElement = NULL;
    TiXmlDocument cXmlDocMaster;
    if ( szXmlParamMaster && cXmlDocMaster.Parse(szXmlParamMaster) )
    {
        pMasterRootElement = cXmlDocMaster.RootElement();
    }

    TiXmlElement* pSlaveRootElement = NULL;
    TiXmlDocument cXmlDocSlave;
    if ( szXmlParamSlave && cXmlDocSlave.Parse(szXmlParamSlave) )
    {
        pSlaveRootElement = cXmlDocSlave.RootElement();
    }

    if ( NULL == pMasterRootElement || NULL == pSlaveRootElement )
    {
        dwLen = 0;
        return E_FAIL;
    }
    else
    {
        // 将主CPU参数内的所有Section结点插入到从CPU参数内的HvParam结点下。
        TiXmlElement* pMasterHvParamElement = NULL;
        TiXmlElement* pSlaveHvParamElement = NULL;
        pMasterHvParamElement = pMasterRootElement->FirstChildElement("HvParam");
        pSlaveHvParamElement = pSlaveRootElement->FirstChildElement("HvParam");
        if ( pMasterHvParamElement && pSlaveHvParamElement)
        {
            TiXmlElement* pMasterSectionElement = NULL;
            pMasterSectionElement = pMasterHvParamElement->FirstChildElement();
            while (pMasterSectionElement)
            {
                pSlaveHvParamElement->LinkEndChild(pMasterSectionElement->Clone());
                pMasterSectionElement = pMasterSectionElement->NextSiblingElement();
            }
        }

        TiXmlPrinter cTxPr;
        cXmlDocSlave.Accept(&cTxPr);
        DWORD32 dwXmlLen = (DWORD32)cTxPr.Size();
        if ( dwLen > dwXmlLen )
        {
            dwLen = dwXmlLen;
            memcpy(szXmlParamAll, cTxPr.CStr(), dwXmlLen);
            return S_OK;
        }
        else
        {
            dwLen = 0;
            return E_FAIL;
        }
    }
}
Example #2
0
bool CXmlConfig::LoadConfig(const char* szRootNodeName,const char* szFileName)
{
	if( !szRootNodeName )
		GenErr("配置文件的根节点名称不能为NULL");


	TiXmlDocument XmlDoc;

	if( !XmlDoc.LoadFile( szFileName ) )
		return false;

	TiXmlElement* pRoot = XmlDoc.FirstChildElement( szRootNodeName );

	if( !pRoot )
	{
		ostringstream strm;
		strm<<"配置文件的根节点不是\""<<szRootNodeName<<"\"";
		GenErr( strm.str() );
	}	
	Clear();

	m_pRoot = static_cast<TiXmlElement*>( pRoot->Clone() );

	return true;
}
Example #3
0
std::string ConfigFile::ExportXML()
{
    TiXmlDocument doc( m_strFilename.c_str() );

    TiXmlElement configData( m_strIdentifier.c_str() );
    configData.SetAttribute( "version", "1.0");

    //Loop through all the configurations
    std::map<std::string, ConfigAttribute>::iterator configIter;
    for(configIter = m_mapConfig.begin(); configIter != m_mapConfig.end(); configIter++)
    {
        ConfigAttribute item = configIter->second;
        std::string firstItem = item.strAttribute;

        //replace whitespace with underscore
        std::replace(firstItem.begin(), firstItem.end(), ' ', '_');
        TiXmlElement elementConfigItem (firstItem.c_str() );
        elementConfigItem.SetAttribute( "value", item.strValue.c_str());

        //Add array sub items to the xml
        if(item.bIsArray)
        {
            for(std::vector<std::string>::iterator iter = item.listValues.begin(); iter != item.listValues.end(); iter++)
            {
                std::string strTemp = *iter;
                TiXmlElement elementArrayItem (firstItem.c_str() );
                elementArrayItem.SetAttribute( "value", strTemp.c_str());
                elementConfigItem.LinkEndChild(elementArrayItem.Clone());
            }
        }
        configData.LinkEndChild(elementConfigItem.Clone());
    }
	doc.LinkEndChild(configData.Clone());

    std::string strReturnXML;
    std::ostringstream strStream;
    
    strStream << doc;
    strReturnXML = strStream.str();
    
	//Save the config file
	return strReturnXML;
}
//
// GetActorXmlSize						- Chapter 22, page 757
//
int GetLevelScriptAdditionsXmlSize ( )
{
	TiXmlDocument *optionsDoc = g_pApp->m_Options.m_pDoc;
	TiXmlElement *pRoot = optionsDoc->RootElement();
    if (!pRoot)
		return 0;

	TiXmlElement *worldScriptAdditions = pRoot->FirstChildElement("WorldScriptAdditions");

	TiXmlDocument outDoc;
	TiXmlNode *node = worldScriptAdditions->Clone();
    outDoc.LinkEndChild(node);

	TiXmlPrinter printer;
	outDoc.Accept(&printer);

	std::string xml = printer.CStr();

	return xml.length();
}
//
// GetActorXml							- Chapter 22, page 758
//
void GetLevelScriptAdditionsXml ( int *xmlAddress )
{
	TiXmlDocument *optionsDoc = g_pApp->m_Options.m_pDoc;
	TiXmlElement *pRoot = optionsDoc->RootElement();
    if (!pRoot)
		return;

	TiXmlElement *worldScriptAdditions = pRoot->FirstChildElement("WorldScriptAdditions");

	TiXmlDocument outDoc;
	TiXmlNode *node = worldScriptAdditions->Clone();
    outDoc.LinkEndChild(node);


	TiXmlPrinter printer;
	outDoc.Accept(&printer);

	std::string xml = printer.CStr();

	strncpy_s(reinterpret_cast<char *>(xmlAddress), xml.length()+1, xml.c_str(), xml.length());
}
Example #6
0
void CXmlConfig::LoadConfig(const char* szRootNodeName,istream& Stream)
{	
	if( !szRootNodeName )
		GenErr("配置文件的根节点名称不能为NULL");


	TiXmlDocument XmlDoc;

	Stream>>XmlDoc;

	TiXmlElement* pRoot = XmlDoc.FirstChildElement( szRootNodeName );

	if( !pRoot )
	{
		ostringstream strm;
		strm<<"配置文件的根节点不是\""<<szRootNodeName<<"\"";
		GenErr( strm.str() );
	}	
	Clear();

	m_pRoot = static_cast<TiXmlElement*>( pRoot->Clone() );
}