Beispiel #1
0
BOOL FindMarkItem(CMarkup& markDoc, ST_MARKITEM& kvOut)
{
	while(markDoc.FindElem())
	{
		//tree node, set val to empty
		kvOut.strVal.Empty();
		kvOut.bIsPath = TRUE;
		ST_MARKITEM tmpItem;
		CString strAttKey;
		CString strAttVal;
		int nAttIdx = 0;
		while(markDoc.GetNthAttrib(nAttIdx, strAttKey, strAttVal))
		{
			tmpItem.mapAttrib[strAttKey] = strAttVal;
			++nAttIdx;
		}

		tmpItem.strKey = markDoc.GetTagName();
		tmpItem.strVal = markDoc.GetElemContent();
		markDoc.IntoElem();
		FindMarkItem(markDoc, tmpItem);
		markDoc.OutOfElem();

		kvOut.mapChildItem[tmpItem.strKey] = tmpItem;
	}

	return TRUE;
}
Beispiel #2
0
/**
调用此函数前需保证xml中已经通过FindElem()定位到当前元素。
*/
void CXmlElement::Load(CMarkup& xml)
{
	_name = xml.GetTagName();
	CString attrib_name, attrib_value;
	int i = 0;
	while(xml.GetNthAttrib(i, attrib_name, attrib_value))
	{
		_attributes.push_back(std::make_pair(attrib_name, attrib_value));
		++i;
	}
	_value = xml.GetData();
	if (_value.IsEmpty())
	{
		xml.IntoElem();
		while (xml.FindElem())
		{
			CXmlElement* element = new CXmlElement;
			element->Load(xml);
			_children.push_back(element);
		}
		xml.OutOfElem();
	}
}