Bueno, después de dos días dando vueltas y buscando información encontré una solución. No sé si será la mejor, pero funciona.
Hay que definir una variable IXMLNodeList y me ha quedado así:
Código:
IXMLNodeList *lstNodos;
ThousandSeparator = ',';
DecimalSeparator = '.';
XMLDocument->Active = true;
iNode0 = XMLDocument->DocumentElement;
iNode1 = iNode0->ChildNodes->FindNode("CstmrDrctDbtInitn");
if (iNode1 == NULL)
continue;
iNode2 = iNode1->ChildNodes->FindNode("GrpHdr");
if (iNode2 == NULL)
continue;
lstNodos = iNode1->ChildNodes;
iNode2 = lstNodos->FindNode((DOMString)"PmtInf");
while (iNode2 != NULL)
{
iNode3 = iNode2->ChildNodes->FindNode("PmtInfId");
if (iNode3 != NULL && iNode3->IsTextElement)
{
[Código para tratar cada nodo]
}
iNode2 = lstNodos->FindSibling(iNode2, 1);
}
El método FindSibling lleva dos parámetros: el primero es el nodo que se está tratando en este momento (iNode2 en este caso) y el segundo es el sentido en que se quiere avanzar en la estructura (positivo hacia adelante, negativo hacia atrás) y el número de nodos que se quiere saltar (si pone uno se busca elsiguiente igual, etc.)