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 ; }