Police said an inter-city passenger train collided on Wednesday with a bus that tried to dash through a railway crossing near the town of Alawwa, about 80km northeast of Colombo.
They added that most of the victims were on board the bus, which was dragged by the train for about 100 metres after the collision.
Police at the scene first reported that at least 50 people died when the bus and train collided, while 40 were injured, 30 of them seriously, police spokesman Rienzie Perera said in Colombo.
Some of the seriously wounded were being brought to the National Hospital in Colombo, he said.
But Dr Ananda Goonesekara, the director of the local hospital, said 35 people were killed. The National Hospital said nine of the wounded, including a four-year-old girl, were in critical condition.
Police spokesman Rienzie Perera said 30 people were seriously wounded.
About 50 Sri Lankan soldiers were deployed to help with rescue work.
The passenger bus was apparently racing another bus to reach its destination first.
"Our initial investigation suggests that the buses were competing with each other to reach Colombo faster," Perera said.
The train was travelling from the capital, Colombo, to the temple city of Kandy when the accident took place. The bus was on its way to Colombo from Dambulla.