Recently, some high-rate maximum distance separable (MDS) array codes were designed to optimally repair a single failed node by connecting all the surviving nodes. However, in practical systems, sometimes not all the surviving nodes are available. To facilitate the practical storage system, a few constructions of (n,k) MDS array codes with the property that any single failed node can be optimally repaired by accessing any d surviving nodes (i.e., minimum-storage regenerating (MSR) codes) have been proposed, where d is an element of [k + 1: n - 1). However, all high-rate MDS array codes with this property either have large sub-packetization levels or are not explicit for all the parameters. To address these issues, we propose a generic transformation that can convert any (n',k') MDS array/scalar code to another (n = n' - delta, k = k' - delta) MDS array code with the optimal repair property and optimal access property for an arbitrary set of two nodes, while the repair efficiency of the remaining n - 2 nodes can be kept, where 2 <= delta <= n' - k'. By recursively applying the generic transformation to an MDS scalar code multiple times, we get a high-rate MDS array code with the optimal repair property and the optimal access property for all nodes, which outperforms previous known high-rate MDS array codes in terms of either the sub-packetization level or the flexibility of the parameters.