| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hzXmlNode::SelectSubnodes | (hzVect<hzXmlNode*>&,hzMapM<hzString,hzXmlNode*>&,const char*,) |
Declared in file: hzDocument.h
Defined in file : hzDocXml.cpp
Function Logic:
Function body:
hzEcode hzXmlNode::SelectSubnodes (hzVect<hzXmlNode*>& result, hzMapM<hzString,hzXmlNode*>& allsubnodes, const char* criteria)
{
_hzfunc("hzXmlNode::SelectSubnodes") ;
hzVect<hzString> ar ;
hzXmlNode* pnode ;
const char* i ;
const char* j ;
hzString S ;
uint32_t nIndex ;
uint32_t nLo ;
uint32_t nHi ;
uint32_t nX ;
result.Clear() ;
if (!allsubnodes.Count())
return E_NODATA ;
if (!criteria || !criteria[0])
{
for (nIndex = 0; nIndex < allsubnodes.Count() ; nIndex++)
{
pnode = allsubnodes.GetObj(nIndex) ;
result.Add(pnode) ;
}
return E_OK ;
}
for (j = i = criteria ; *i ; i++)
{
if (i[0]== CHAR_PERIOD)
{
S.SetValue(j, i) ;
ar.Add(S) ;
j = i + 1;
continue ;
}
if (i[0]== CHAR_EQUAL || (i[0]== CHAR_MINUS && i[1]== CHAR_MORE))
{
S.SetValue(j, i) ;
ar.Add(S) ;
j = 0;
break ;
}
}
if (j)
{
S = j ;
ar.Add(S) ;
}
for (nIndex = ar.Count() ; nIndex ; nIndex--)
{
S = ar[nIndex-1];
}
nLo = allsubnodes.First(S) ;
if (nLo < 0)
return E_NODATA ;
nHi = allsubnodes.Last(S) ;
for (nX = nLo ; nX <&eq; nHi ; nX++)
{
pnode = allsubnodes.GetObj(nX) ;
if (pnode->txtName() != S)
continue ;
if (ar.Count() == 1)
{
result.Add(pnode) ;
continue ;
}
}
return E_OK ;
}