当前位置: 首页>>代码示例>>C++>>正文


C++ XMLNode::SetAttrMap方法代码示例

本文整理汇总了C++中XMLNode::SetAttrMap方法的典型用法代码示例。如果您正苦于以下问题:C++ XMLNode::SetAttrMap方法的具体用法?C++ XMLNode::SetAttrMap怎么用?C++ XMLNode::SetAttrMap使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在XMLNode的用法示例。


在下文中一共展示了XMLNode::SetAttrMap方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: _Parse

XMLNode* XMLParser::_Parse(wchar_t* buf)
{
	std::wstring token;
	eCurState state = NONE;

	attrMap	   attributeMap;
	std::wstring attrKey;

	XMLNode* curNode = new XMLNode;
	while( _mParsingIndex < _mBufSize )
	{
		switch( buf[_mParsingIndex] )
		{
		case L'<':
			if( state == ELEMENT )				// After element, It could be either closing node or new child node
			{
				if( _IsTokenTab(token) )			// At first, delete the all gap (similar to trim function)
				{
					token.clear();
				}

				if( buf[_mParsingIndex+1] == L'/' )	// In case of closing the node
				{
					curNode->SetElement( token );
					token.clear();

					state = CLOSING_NODE;
					++_mParsingIndex;
				}
				else													// In case of new child node
				{
					curNode->AddChild( _Parse(buf) );
				}
			}
			else														// In case of new node
			{
				++_mParsingIndex;

				if( buf[_mParsingIndex] == L'?' || buf[_mParsingIndex] == L'!')		// if new node is about xml information
				{
					_GetTokenWith(buf, L'>');
				}
				else													// Read the new node's name
				{
					token += buf[_mParsingIndex];
					state = OPENING_NODE;
				}
			}

			break;

		case L'>':
			switch( state )
			{
			case ATTR_VALUE:			// In case that new node's attr setting is all set
				curNode->SetAttrMap(attributeMap);
				attributeMap.clear();

				state = ELEMENT;
				break;

			case CLOSING_NODE:		// In case that making node is all set

				if( curNode->GetName().compare(token) != 0  )
				{
					delete curNode;

					wprintf(L"XML ERROR ( closing element's name isn't correct [%s] ) - line %d", curNode->GetName().c_str(), _mLine );
					return nullptr;
				}

				return curNode;

			case OPENING_NODE:		// In case that new node's name setting is all set
				curNode->SetName( token );
				token.clear();

				state = ELEMENT;
				break;

			default:
				std::wcerr<<L"SWITCH_DEFAULT : "<<__FILE__<<L" "<<__LINE__<<std::endl;
				return nullptr;
			}
			break;

		case L' ':
			switch( state )
			{
			case OPENING_NODE:		// After setting the name of new node
				curNode->SetName( token );
				token.clear();

				state = ATTR_VALUE;
				break;

			case ELEMENT	:				// if ' ' is used for element, then just use that
				token += L' ';
				break;

//.........这里部分代码省略.........
开发者ID:krbod,项目名称:XMLParser,代码行数:101,代码来源:XMLParser.cpp


注:本文中的XMLNode::SetAttrMap方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。