In Sunday’s final Sweden will meet reigning champions the Czech Republic, who clinched their place in the final by beating Finland 3-1 earlier on Saturday.
Sweden recorded their 24th win in 56 head-to-head meetinigs with Canada to remain on course to become the first ever nation to win the Olympic and world gold in the same year.
The Swedes got off to a lively start scoring twice in the opening five minutes through Detriot Red Wings rear guard Niklas Kronwall and forward Jörgen Jönsson.
Chicago Blackhawks striker Kyle Calder reduced the arrears for Canada but the Swedes restored their two-goal lead as Tony Mårtensson’s shot rebounded off defender Brad Stuart’s skate and into the net just three minutes later.
Mike Comrie, who plays for NHL side Phoenix Coyotes, cut the Swedes’ advantage again to send Canada into the first break just 3-2 behind.
But Sweden came out firing in the second period and goals from Mikael Samuelsson and Jonas Nordquist within the opening three minutes made it 5-2.
Tournament top scorer Sidney Crossby netted his eighth goal of the competition to reduce the arrears at the end of the second period.
Patrice Bergeron netted Canada’s fourth 3:38 into the third period but Sweden defended well and held on to gain a revenge for defeats in the 2003 and 2004 finals, dashing Canada’s hopes of clinching their fourth consecutive final.