First a question - is iSignatureCount a global? If so, this approach may not be thread safe. An alternative (if threading is an issue) might be to pass in the previous found node to findNext.
strEquals should be able to handle a mixture of XMLCh and char strings, but it will assume the string is on the local code page. Could it be failing in the transcode for some reason.
Can you tell us what the failure is?
Cheers, Berin
Milan Tomic wrote:
Thank you all that replyed. Here is what I tried:
DOMNode *findNextDSIGNode(DOMNode *n, const char * nodeName) { const XMLCh * name = getDSIGLocalName(n); if (strEquals(name, nodeName)) { if (iSignatureFound==iSignatureCount) //skip previous "Signature" nodes return n; iSignatureFound++; } DOMNode *child = n->getFirstChild(); while (child != NULL) { DOMNode *ret = findNextDSIGNode(child, nodeName); if (ret != NULL) return ret; child = child->getNextSibling(); } return child; }
DOMNode *sigNode;
iSignatureCount = 0; iSignatureFound = 0;// globals
while ((sigNode = findNextDSIGNode(doc, "Signature")) != NULL) { verSig(sigNode);
iSignatureCount++; //find next "Signature" node
}
but, it seems that my app crashes in strEquals() function call. Is there someone willing to help? :)
Thank you, Milan