"We learned a lot from the last game," team captain Stephen Fleming
"We made mistakes in the last game but got everything right today. It's nice to know that we're through to the semis."
The South Africa pace attack of Shaun Pollock, Makhaya Ntini and Andre Nel troubled New Zealand early on, but the Black Caps regrouped from 42-2 as the pitch dried out under hot Caribbean sunshine.
Styris in the runs again
Scott Styris, who hit 111 against Sri Lanka, passed 50 for the fifth time
in the tournament to make 56 and Fleming was twice dropped on the way to his 49th one-day half-century.
Craig McMillan hit 38 not out to follow the three wickets he took as New
Zealand took their time reaching the target.
While New Zealand joined Australia in the semifinals, South Africa must
now beat England in Barbados on Tuesday to be sure of place in the last four.
Speed and movement from New Zealand's pace bowlers and accuracy from its spinners restricted the Proteas' scoring, creating such pressure that three batsmen were out trying to smash the apparently unthreatening McMillan.
James Franklin and Shane Bond had reduced South Africa to 3-2 inside three overs after Fleming had won the toss.
Franklin and Bond sent down a series of unplayable deliveries aided by the coolest, breeziest and most overcast conditions since the Super 8s moved here at the start of the week.
Bond tempted Smith into a cover drive that Jacob Oram collected with a
diving catch, the captain departing for one.
A.B. de Villiers, who hit 146 at the same ground in Tuesday's win over West Indies, went leg-before-wicket to Franklin for nought.
A brief rain flurry moved through the ground halfway through the eighth
over, so quickly the players did not leave the field. South Africa did not
score more than two from an over until the 10th, when Herschelle Gibbs struck a four off Bond to make it 12-2.
Kallis and Gibbs each struck a six as they started advancing down the
wicket. So, wicketkeeper Brendon McCullum donned a helmet and stood up to the stumps, a brave move against Bond's pace and after the blow to the groin he received doing the same against West Indies.
Fleming took his second and third powerplays as early as possible and
brought on Jeetan Patel and Daniel Vettori against a team that often
struggles against spin.
Kallis took a swipe from Vettori's first over when on 22 and Bond took a
catch at cover to make it 52-3 off 20 overs.
Gibbs and Ashwell Prince shared a 56-run stand but McMillan came on and took a wicket in three of his first four overs.
He got Gibbs to play on and depart for a 100-ball 60, lured Prince (37)
into hitting back up the wicket to Patel, and had Mark Boucher caught by Peter Fulton for 16.
Andrew then holed out to Bond after a 17-ball 17, Oram taking the catch.
Bond finished with 2-26, while Shaun Pollock was 21 not out and Robin
Peterson unbeaten on eight.
New Zealand's innings started more quickly than South Africa's but was
Opener Peter Fulton went for 16 and Ross Taylor for 10, but Fleming made the most of his fortune to pass 8,000 one-day runs and give his team a platform for victory.
On 24, Fleming attempted to pull a delivery by Nel but top-edged it and
wicketkeeper Boucher dropped the chance. And on 36, he was dropped by Gibbs off Kallis.
Desperate for a breakthrough, South Africa brought the threatening Pollock and Andrew Hall back in place of Robin Peterson and Kallis. A ball after he reached 50, Fleming edged Pollock to Boucher.
However, Styris and McMillan shared a fourth-wicket stand of 56. With the target in sight, the pair lashed out to hit some boundaries, including a huge six by McMillan off Peterson.
Styris reached 56 before mistiming a shot from Peterson straight to Gibbs
at cover and Nel bowled Oram for 10. But New Zealand only needed two more runs and McCullum wrapped things up with a four with from the next ball.