xml_cmarkup.cpp

来自「cmarkup是一个简易的xml解释器」· C++ 代码 · 共 78 行

CPP
78
字号
#include "..\gpinclude\xml_cmarkup.h"
#include "..\gpinclude\std_string.h"

bool GP::FindElemByIndex(CMarkup & xml, int index)
{
	xml.ResetMainPos();
	for (;index >= 0 ;)
	{
		if (!xml.FindElem())
		{
			return false;
		}
		index--;	
	}
	return true;
}

bool GP::FindElemByLayer(CMarkup & xml, char * szLayerVector)
{
	char * szIndex = new char[XML_CMARKUP_DEPTH + 1];  
	int iIndex = 0;                   //当前层的item索引号

	//begin和end用来解析传递进来的层次路径字符串。分析出各层的item索引号。
	//begin代表当前将要解析的字符串开始地址,end代表当前将要解析的字符串的结束地址
	//解析方法是通过getSubString取得起止地址段间的字符串,然后用atoi将其转换为整数型的item索引号。
	char * begin = szLayerVector;
	char * end = begin;

	end = strchr(begin, ',');
	GP::getSubString(begin, end, szIndex, XML_CMARKUP_DEPTH + 1);

	for (;;)
	{
		iIndex = atoi(szIndex);

		if (!FindElemByIndex(xml, iIndex))
		{
			return false;
		}	

		begin = ++end;		
		end = strchr(begin, ',');

		if (!end)//则说明解析完毕,正常返回。
		{
			return true;
		}
		GP::getSubString(begin, end, szIndex, XML_CMARKUP_DEPTH + 1);

		//如果没有解析完毕,则还要进入下一层,继续解析。
		if (!xml.IntoElem())//如果进入一下层出错,则说明已经是最后一层了,用户要求的解析层数多于实际情况,返回false。
		{
			return false;
		}	
	}		
}

bool GP::ReFindElemByLayer(CMarkup & xml, char * szLayerVector)
{
	xml.ResetPos();
	return xml.FindElem() && FindElemByLayer(xml, szLayerVector);	
}



bool GP::FindChildElemByIndex(CMarkup & xml, int index)
{
	xml.ResetChildPos();
	for (;index >= 0 ;)
	{
		if (!xml.FindChildElem())
		{
			return false;
		}
		index--;	
	}
	return true;
}

⌨️ 快捷键说明

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