示例#1
0
文件: xml-tag.cpp 项目: WST/mawar
/**
* Найти следующий узел
* @param path путь к узлу
* @return найденый узел или 0 если узлов больше нет
*/
XmlTag* XmlTag::findNext(const char *path, XmlTag *from)
{
	const char *remain = strchr(path, '/');
	if ( remain == 0 ) return nextChild(path, from);
	
	// TODO выделять строку во временном буфере
	string name(path, remain++);
	
	//XmlTag *parent = from->parent;
	
	for(XmlTag *child = firstChild(name.c_str()); child; child = nextChild(name.c_str(), child))
	{
		if ( child->hasChild(from) )
		{
			XmlTag *result = child->findNext(remain, from);
			if ( result ) return result;
			
			child = nextChild(name.c_str(), child);
			for(; child; child = nextChild(name.c_str(), child))
			{
				XmlTag *result = child->find(remain);
				if ( result ) return result;
			}
			
			return 0;
		}
	}
	
	return 0;
}
示例#2
0
文件: xml-tag.cpp 项目: WST/mawar
/**
* Найти первого потомка по указанному пути
*/
XmlTag* XmlTag::find(const char *path)
{
	const char *remain = strchr(path, '/');
	if ( remain == 0 ) return firstChild(path);
	
	// TODO выделять строку во временном буфере
	string name(path, remain++);
	
	for(XmlTag *child = firstChild(name.c_str()); child; child = nextChild(name.c_str(), child))
	{
		XmlTag *result = child->find(remain);
		if ( result ) return result;
	}
	
	return 0;
}