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

📄 xmlparser.cpp

📁 液晶电视完整代码可实现人机界面
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//------------------------------------------------------------------- //文件名:xmlparser.cpp//创建人:乔立//日  期:2002-02-25//修改人:陈熹//日  期:2002-10-30//描  述:解析XML类//版  本://Copyright (c) 2001  EITOP//------------------------------------------------------------------- #include "xmlparser.h"//------------------------------------------------------------------- //函数名:	CXMLParser::TxtToXML//功能描述:	通过节点内容构建节点指针//作   者:	郝昌富//日   期:	2002-05-31//输   入:  //修   改://日   期://版   本://------------------------------------------------------------------- void CXMLParser::TxtToXML(){	int Parent = -1;	int OldBrother = -1;	char * currstr;	char * endstr;	currstr = strstr(m_txtbuf, "<");		// 有效节点的开始	while ( currstr != NULL )	{	//printf("The node: %d\n", m_CurrNode );		*currstr = 0;		currstr++;		switch  ( *currstr ){		case '?' :	// 暂不处理'<? ...  ?>'类型数据			currstr = strstr(currstr+1, "?>");			if ( currstr == NULL )			{				printf("非法的xml文件(<?不匹配)!\n" );			}			break;		case '!' :	// 暂不处理'<! ...  >'类型数据			currstr = strstr(currstr+1, ">");			if ( currstr == NULL )			{				printf( "非法的xml文件(<!不匹配)!\n" );			}			break;		case '/':	// 节点结束			if ( m_IdxNum <= 0 || m_IdxNum > m_IdxBufLen )			{				printf( "非法的xml文件!\n" );			}			if ( m_idxbuf[m_CurrNode].closed )			{				m_CurrNode = m_idxbuf[m_CurrNode].Parent;			}			CleanValue( m_idxbuf[m_CurrNode].Value );			OldBrother = m_CurrNode;			Parent = m_idxbuf[m_CurrNode].Parent;			currstr = strstr(currstr+1, ">");			if ( currstr == NULL )			{				printf( "非法的xml文件(>不匹配)!" );			}			m_idxbuf[m_CurrNode].closed = 1;			break;		default:			if ( m_IdxBufLen-m_IdxNum <= 0 )			{				InsIdxbuf() ;			}			m_idxbuf[m_IdxNum].Parent = Parent ;			if ( Parent >= 0 )			{				if ( m_idxbuf[Parent].Child < 0 )				{					m_idxbuf[Parent].Child= m_IdxNum ;		// 父节点的长节点				}			}			if ( OldBrother >= 0 )			{				m_idxbuf[OldBrother].Brother = m_IdxNum ;			}			// 节点起始串必为节点名称, 且无任何分割符			m_idxbuf[m_IdxNum].Name = currstr ;			endstr = strstr(currstr+1, ">");			if ( endstr == NULL )			{				printf( "非法的xml文件(>不匹配)!" );			}			currstr = endstr + 1;			if ( *(endstr-1) == '/' )	// 不存在下级节点			{				OldBrother = m_IdxNum;				*(endstr-1) = 0 ;			} 			else 			{				Parent = m_IdxNum;				OldBrother = -1;				*endstr = 0;				m_idxbuf[m_IdxNum].Value = GetValueFromStr( endstr+1 );				m_idxbuf[m_IdxNum].closed = 0;  // 该节点尚未闭合			}			// 节点名称后为节点属性			m_idxbuf[m_IdxNum].Attri = GetAttrFromStr( m_idxbuf[m_IdxNum].Name ) ;			m_CurrNode = m_IdxNum;			m_IdxNum++;			// end of default		} // end of switch		currstr = strstr(currstr, "<");			// 有效节点的开始	} 	return;}//------------------------------------------------------------------- //函数名:	CXMLParser::GetRootNode//功能描述:	获取根节点//作   者:	乔立//日   期:	2002-02-25//输   出:  char *NodeName : Root Node Name!//修   改://日   期://版   本://------------------------------------------------------------------- int CXMLParser::GetRootNode( char *NodeName ){	m_CurrNode = 0;	if ( m_idxbuf[m_CurrNode].Name == NULL )	{		return FALSE;	}	strcpy( NodeName , m_idxbuf[m_CurrNode].Name );	return M_SUCCESS;}//------------------------------------------------------------------- //函数名:	CXMLParser::GetCurrNode//功能描述:	获取本节点//作   者:	乔立//日   期:	2002-02-25//输   出:  char *NodeName : Node Name!//修   改://日   期://版   本://------------------------------------------------------------------- int CXMLParser::GetCurrNode( char *NodeName ){	strcpy( NodeName , m_idxbuf[m_CurrNode].Name );	return M_SUCCESS;}//------------------------------------------------------------------- //函数名:	CXMLParser::GetChildNode//功能描述:	获取子节点//作   者:	乔立//日   期:	2002-02-25//输   出:  char *childnode : Child Node Name!//修   改://日   期://版   本://------------------------------------------------------------------- int CXMLParser::GetChildNode( char *childnode ){	if ( GetChildNode() == 0 )	{		strcpy( childnode , m_idxbuf[m_CurrNode].Name );		return M_SUCCESS;	} 	else 	{		return GENERR;	}}//------------------------------------------------------------------- //函数名:	CXMLParser::GetChildNode//功能描述:	获取子节点//作   者:	乔立//日   期:	2002-02-25//说   明:  定位ChildNode  	//修   改://日   期://版   本://------------------------------------------------------------------- int CXMLParser::GetChildNode(){	if ( m_idxbuf[m_CurrNode].Child >= 0 )	{		m_CurrNode = m_idxbuf[m_CurrNode].Child;		return M_SUCCESS;	} 	else 	{		return GENERR;	}}//------------------------------------------------------------------- //函数名: CXMLParser::GetRightNode//功能描述: 获取右兄弟节点//作   者: 乔立//日   期: 2002-02-25//输   入:  char *node : Current Node Name!//          char *rightnode : Right Node Name!//修   改://日   期://版   本://------------------------------------------------------------------- int CXMLParser::GetRightNode( char *node , char *rightnode ){	if ( m_idxbuf[m_CurrNode].Brother >= 0 )	{		m_CurrNode = m_idxbuf[m_CurrNode].Brother;		strcpy( rightnode , m_idxbuf[m_CurrNode].Name );		return M_SUCCESS;	} 	else 	{		return GENERR;	}}//------------------------------------------------------------------- //函数名:	CXMLParser::GetTagAttri//功能描述:	获取tag属性值//作   者:	乔立//日   期:	2002-02-25//输   入:  char *AttriName : Current Attribute Name!//输   出:  char *AttriValues : Current Attribute Values!//修   改://日   期://版   本://------------------------------------------------------------------- int CXMLParser::GetTagAttri( char *AttriName , char *AttriValues ){	char *substr;	char *str1;	char *str2;	int  j=0;		str1 = strstr( m_idxbuf[m_CurrNode].Attri , AttriName );	if( str1 == NULL )	{		return GENERR;	}			str2 = strstr( str1 , "=" );	if( str2 == NULL )	{		return GENERR;	}			substr = strstr( str2 , "\"" );	if( substr == NULL )	{		return GENERR;	}	substr+=1;	while( *substr != '"' )	{		AttriValues[j++] = *substr++;	}	AttriValues[j]='\0';		return M_SUCCESS;}//------------------------------------------------------------------- //函数名:	CXMLParser::GetParentNode//功能描述:	获取父节点//作   者:	乔立//日   期:	2002-02-25//输   出:  char *parentnode : Parent Tag Name!//修   改://日   期://版   本://------------------------------------------------------------------- int CXMLParser::GetParentNode( char *parentnode ){	if ( GetParentNode() == 0 )	{		return GetCurrNode( parentnode );	} 	else 	{		return GENERR;	}}//------------------------------------------------------------------- //函数名:	CXMLParser::GetParentNode//功能描述:	获取父节点//作   者:	乔立//日   期:	2002-02-25//输   出:  定位ParentNode	//修   改://日   期://版   本://------------------------------------------------------------------- int CXMLParser::GetParentNode(){	if ( m_idxbuf[m_CurrNode].Parent >= 0 )	{		m_CurrNode = m_idxbuf[m_CurrNode].Parent;		return M_SUCCESS;	} 	else 	{		return GENERR;	}}//------------------------------------------------------------------- //函数名:	CXMLParser::GetValuesFromTag//功能描述:	在本级节点中查找指定Tag的value//作   者:	//日   期:	//输   入:  char *TagName : Tag Name//输   出:  char *Values : Values//修   改://修   改://日   期://版   本://------------------------------------------------------------------- int CXMLParser::GetValuesFromTag( char *TagName , char *Value ){	if ( Locate( TagName ) )	{		return GENERR;	}		if ( m_idxbuf[m_CurrNode].Value != NULL )	{		strcpy( Value , m_idxbuf[m_CurrNode].Value );	}	else	{		Value = 0;	}	GetParentNode();	return M_SUCCESS;}//------------------------------------------------------------------- //函数名:	CXMLParser::PrtNode//功能描述:	返回XML流//作   者:	乔立//日   期:	2002-02-25//修   改://修   改://日   期://版   本://------------------------------------------------------------------- void CXMLParser::PrtNode( int Node, int depth ){	int i;	for ( i=0; i<depth; i++ ) 	{		out_str.Add( "\t" ) ;	}	out_str.Add( "<" ) ;	out_str.Add( m_idxbuf[Node].Name );	if ( m_idxbuf[Node].Attri != NULL )	{		out_str.Add( " " ) ;		out_str.Add( m_idxbuf[Node].Attri );	}	out_str.Add( ">\n" ) ;	if ( m_idxbuf[Node].Value != NULL )	{		for ( i=0; i<depth+1; i++ ) 		{			out_str.Add( "\t" ) ;		}		out_str.Add( m_idxbuf[Node].Value );		out_str.Add( "\n" ) ;	}	int tmpnode = m_idxbuf[Node].Child;	if ( tmpnode >= 0 )	{		PrtNode( tmpnode, depth+1 );	}	for ( i=0; i<depth; i++ ) 	{		out_str.Add( "\t" ) ;	}	out_str.Add( "</" ) ;	out_str.Add( m_idxbuf[Node].Name );	out_str.Add( ">\n" ) ;	tmpnode = m_idxbuf[Node].Brother;	if ( tmpnode >= 0 )	{		PrtNode( tmpnode, depth );	}}char *CXMLParser::XMLToString(){	out_str.Truncate();	PrtNode( 0, 0 );	return out_str.str;}//------------------------------------------------------------------- //函数名:	CXMLParser::GetCurrentStream//功能描述:	返回当前指针 m_currstream//作   者:	乔立//日   期:	2002-02-25//修   改://修   改://日   期://版   本://------------------------------------------------------------------- char *CXMLParser::GetCurrentStream(){	return m_txtbuf;}//------------------------------------------------------------------- //函数名:	CXMLParser::InitXMLStream//功能描述:	//作   者:	乔立//日   期:	2002-02-25//修   改://修   改://日   期://版   本://------------------------------------------------------------------- void CXMLParser::InitXMLStream(){}//------------------------------------------------------------------- //函数名:	CXMLParser::InitXMLStream//功能描述:	//作   者:	乔立//日   期:	2002-02-25//修   改://修   改://日   期://版   本://------------------------------------------------------------------- void CXMLParser::InitXMLStream( char *filestream ){}

⌨️ 快捷键说明

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