⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlepg.cpp

📁 生成关于EPG的XML文档工具
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// XmlEPG.cpp: implementation of the XmlEPG class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include <string.h>
#include "XmlEPG.h"
#include "ChineseCodeLib.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

const char *xmlDocTemplate =
		"<?xml version=\"1.0\"	standalone='no'	encoding='UTF-8'>"
		"<!-- EPG XML DOCUMENT -->"
		"<EPG>"
		"<FASTLIST></FASTLIST>"
		"<CUR_PRG_INFO></CUR_PRG_INFO>"
		"<BOOKED></BOOKED>"
		"</EPG>";



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

XmlEPG::XmlEPG(const char* docName)
{
	m_doc = TiXmlDocument( docName );
}

XmlEPG::~XmlEPG()
{

}

XML_ERROR_T XmlEPG::XmlDocInit()
{
	m_doc.Clear();
	m_doc.Parse( xmlDocTemplate );
	if ( m_doc.Error() )
		return XML_ERROR_COMM;
	else
		return XML_SUCCESS;
}

XML_ERROR_T XmlEPG::XmlLoad(const char *fileName)
{
	bool loadOkay;
	
	loadOkay = m_doc.LoadFile(fileName);
	if ( !loadOkay )
		return XML_ERROR_COMM;
	else
		return XML_SUCCESS;
}

XML_ERROR_T XmlEPG::XmlWriteFile(const char *fileName)
{
	bool saveOkay;
	
	if(fileName != NULL)
	{
		saveOkay = m_doc.SaveFile(fileName);
		if(!saveOkay)
			return XML_ERROR_COMM;
	}
	else
	{
		saveOkay = m_doc.SaveFile();
		if(!saveOkay)
			return XML_ERROR_COMM;
	}
	return XML_SUCCESS;
}

XML_ERROR_T XmlEPG::XmlADD_NET_INFO(NET_INFO info, 
									const char* labelname,
									const char* disname)
{
	TiXmlElement *element;
	TiXmlElement NetInfo( labelname );

	element = m_doc.FirstChildElement( disname );
	if( element == NULL )
	{
		return XML_ERROR_COMM;
	}

	NetInfo.SetAttribute( "iNetId", info.iNetId );
	NetInfo.SetAttribute( "acNetworkName", info.acNetworkName );
	NetInfo.SetAttribute( "iPhyChannelNumber", info.iPhyChannelNumber );
	NetInfo.SetAttribute( "iFirstPhyIndex", info.iFirstPhyIndex );
	NetInfo.SetAttribute( "iPhyNumWhenSearch", info.iPhyNumWhenSearch );	
	NetInfo.SetAttribute( "uiCrc", info.ucflag );
	NetInfo.SetAttribute( "ucCrc", info.ucCrc );
	element->InsertEndChild( NetInfo );
	
	return XML_SUCCESS;
}

XML_ERROR_T XmlEPG::XmlADD_PHYSICAL_INFO(PHYSICAL_CHANNAL info, 
										 const char* labelname, 
										 const char* disname)
{
	TiXmlElement *element;
	TiXmlElement PhysicalInfo( labelname );

	element = m_doc.FirstChildElement( "EPG" );
	element = element->FirstChildElement( disname );

	if( element == NULL )
	{
		return XML_ERROR_COMM;
	}

	PhysicalInfo.SetAttribute( "iTsId", info.iTsId );
	PhysicalInfo.SetAttribute( "iNetInfoAddress", info.iNetInfoAddress );
	PhysicalInfo.SetAttribute( "dwFrequency", info.dwFrequency );
	PhysicalInfo.SetAttribute( "dwRateOfSym", info.dwRateOfSym );
	PhysicalInfo.SetAttribute( "byQamStyle", info.byQamStyle );
	PhysicalInfo.SetAttribute( "iProgramNum", info.iProgramNum );
	PhysicalInfo.SetAttribute( "iNextChannel", info.iNextChannel );
	PhysicalInfo.SetAttribute( "iFirstProIndex", info.iFirstProIndex );
	PhysicalInfo.SetAttribute( "iLastProIndex", info.iLastProIndex );
    PhysicalInfo.SetAttribute( "iSerNumWhenSearch", info.iSerNumWhenSearch );
	PhysicalInfo.SetAttribute( "ucFlag", info.ucFlag );
	element->InsertEndChild( PhysicalInfo );
	
	return XML_SUCCESS;
}

XML_ERROR_T XmlEPG::XmlADD_DIGITAL_INFO(DIGITAL_PGROGRAM info, 
										const char* labelname,
										const char* disname)
{
	TiXmlElement *element = XmlLocate( disname );
	TiXmlElement DigitalInfo( labelname );
	CChineseCodeLib chs;
	string name;
	
	if( element == NULL )
	{
		return XML_ERROR_COMM;
	}	

	DigitalInfo.SetAttribute( "ProgramId", info.ProgramId );
	DigitalInfo.SetAttribute( "PrgLogicNum", info.PrgLogicNum );
	DigitalInfo.SetAttribute( "stProgNo", info.stProgNo );
	DigitalInfo.SetAttribute( "iPhyAddress", info.iPhyAddress );
	DigitalInfo.SetAttribute( "iPrevProgramIndex", info.iPrevProgramIndex );
	DigitalInfo.SetAttribute( "iNextProgramIndex", info.iNextProgramIndex );
	chs.GB2312ToUTF_8( name, info.cServiceName, SERVEICE_NAME_LENGTH );
	DigitalInfo.SetAttribute( "cServiceName", name.c_str() );
	DigitalInfo.SetAttribute( "flag", info.flag );
	DigitalInfo.SetAttribute( "ucSpecialFlag", info.ucSpecialFlag );
	DigitalInfo.SetAttribute( "ucSoundValue", info.ucSoundValue );
	DigitalInfo.SetAttribute( "ucServiceType", info.ucServiceType );
	DigitalInfo.SetAttribute( "vid_pid", info.vid_pid );
	DigitalInfo.SetAttribute( "aud_pid", info.aud_pid );
	DigitalInfo.SetAttribute( "pcr_pid", info.pcr_pid );
	DigitalInfo.SetAttribute( "pmt_pid", info.pmt_pid );
	element->InsertEndChild( DigitalInfo );
	
	return XML_SUCCESS;
}

XML_ERROR_T XmlEPG::XmlADD_EPG_PROGRAM(EPGPROGRAM info, 
									   const char* labelname, 
									   const char* disname)
{
	TiXmlElement *element = XmlLocate( disname );
	TiXmlElement EPGPrgInfo( labelname );
	CChineseCodeLib chs;
	string name;

	if( element == NULL )
	{
		return XML_ERROR_COMM;
	}

	EPGPrgInfo.SetAttribute( "wProgID", info.wProgID );
	EPGPrgInfo.SetAttribute( "TSID", info.TSID );
	EPGPrgInfo.SetAttribute( "ServiceID", info.ServiceID );
	EPGPrgInfo.SetAttribute( "duration", info.duration );
	EPGPrgInfo.SetAttribute( "dwStart", info.dwStart );
	EPGPrgInfo.SetAttribute( "cType", info.cType );
	EPGPrgInfo.SetAttribute( "cAge", info.cAge );
	chs.GB2312ToUTF_8( name, info.szProgName, strlen(info.szProgName) );
	EPGPrgInfo.SetAttribute( "szProgName", name.c_str() );
	chs.GB2312ToUTF_8( name, info.strContent, strlen(info.strContent) );
	EPGPrgInfo.SetAttribute( "strContent", name.c_str() );
	element->InsertEndChild( EPGPrgInfo );

	return XML_SUCCESS;
}

XML_ERROR_T XmlEPG::XmlADD_FASTLIST(ProgramIndex info, 
									const char* disname)
{
	TiXmlElement *element = XmlLocate( disname );
	const char* labelname = NULL;
	
	char temp1[3];

	switch( info.pType )
	{
	case Broadcast_Type:
		labelname = "F_Broadcast_Type";
		break;
	case Video_Type:
		labelname = "F_Video_Type";
		break;
	case Stock_Type:
		labelname = "F_Stock_Type";
		break;
	case SKY_NVOD_TYPE:
		labelname = "F_SKY_NVOD_TYPE";
		break;
	default:
		labelname = "INVALID_TYPE";
	}

	TiXmlElement PrgInd( labelname );
	
	if( element == NULL )
	{
		return XML_ERROR_COMM;
	}	

	PrgInd.SetAttribute( "pType", info.pType );
	PrgInd.SetAttribute( "totalNum", info.totalNum );
	for( int i = 0; i < info.totalNum; i++ )
	{
		char temp2[20] = "dgtAddr";
		_itoa( i + 1, temp1, 10 );
	    strcat( temp2, temp1 );
		PrgInd.SetAttribute( temp2, info.dgtAddr[i] );
	}

	element->InsertEndChild( PrgInd );

	return XML_SUCCESS;
}

XML_ERROR_T XmlEPG::XmlADD_CURPRG_INFO(Cur_Prg_Info info, 
									   const char* disname)
{
	TiXmlElement *element = XmlLocate( disname );
	const char* labelname = NULL;

	if( element == NULL )
	{
		return XML_ERROR_COMM;
	}

	element->SetAttribute( "ProgramType", info.ProgramType );
	element->SetAttribute( "prePrgType", info.prePrgType );

	for( int i = 0; i < 2; i++ )
	{
		switch( i ) 
		{
		case Broadcast_Type:
			labelname = "C_Broadcast_Type";		
			break;
		case Video_Type:
			labelname = "C_Video_Type";
			break;
		case Stock_Type:
			labelname = "C_Stock_Type";
			break;
		case SKY_NVOD_TYPE:
			labelname = "C_SKY_NVOD_TYPE";
			break;
		default:
			labelname = "INVALID_TYPE";
		}
		TiXmlElement CurPrgInfo( labelname );
		CurPrgInfo.SetAttribute( "iPreChl", info.iPreChl[i] );
		CurPrgInfo.SetAttribute( "iCurChl", info.iCurChl[i] );
		CurPrgInfo.SetAttribute( "iProgramAddress", info.curPrg[i].iProgramAddress );
		CurPrgInfo.SetAttribute( "muteFlag", info.curPrg[i].muteFlag );

		element->InsertEndChild( CurPrgInfo );
	}
	return XML_SUCCESS;
}

XML_ERROR_T XmlEPG::XmlADD_BOOKED_EVENT(BOOKED_EVENT info, const char* labelname, 
										const char* disname)
{
	TiXmlElement *element = XmlLocate( disname );
	TiXmlElement Booked_Evt( labelname );
	CChineseCodeLib chs;
	string name;

	if( element == NULL )
	{
		return XML_ERROR_COMM;
	}

	Booked_Evt.SetAttribute( "dt", info.dt );
	Booked_Evt.SetAttribute( "duration", info.duration );
	Booked_Evt.SetAttribute( "evtId", info.evtId );
	Booked_Evt.SetAttribute( "srvId", info.srvId );
	Booked_Evt.SetAttribute( "tsId", info.tsId );
	Booked_Evt.SetAttribute( "type", info.type );
	Booked_Evt.SetAttribute( "nvodRefSrvId", info.nvodRefSrvId );
	chs.GB2312ToUTF_8( name, info.Name, strlen(info.Name) );
	Booked_Evt.SetAttribute( "Name", name.c_str() );
	element->InsertEndChild( Booked_Evt );

	return XML_SUCCESS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -