The attack happened at 2.20pm local time (1.20pm UK time), near Salez in St Gallen Canton, as the train travelled between Buchs and Sennwald.
Police in St Gallen canton said the 27-year-old suspect had at least one knife and poured out a flammable liquid, which caught fire.
Police say the wounded included a six-year-old child, three women aged 17, 34 and 43, and two men aged 17 and 50.
Some of the injuries were said to be serious but there were no further details immediately.
In addition to a large police presence, the local fire department responded along with three rescue helicopters, two emergency doctors, three ambulances and railway authorities.
A preliminary estimate says that the train suffered £80,000 in damage.
The alleged attacker, a 27-year-old Swiss citizen, was also injured when the train was set alight.
The injured, including the alleged attacker, have been rushed to hospital.
In a statement, St Gallen Police said: “According to current information a 27-year-old Swiss man poured out a flammable liquid.
“He was also armed with at least one knife. The liquid caught fire.”
Police were investigating the attacker’s motive.
Switzerland’s 20 Minuten newspaper reported on its website that police did not believe the incident was terrorist-related.
In July, a refugee from Afghanistan attacked four tourists on a German train, then stabbed a woman as he fled from the train. All survived. Police shot and killed the attacker.
Later in the same month, a teenager armed with an axe and knife attacked passengers on another train in Germany, injuring a score of people. He too was shot and killed by police as he tried to escape from the train.
Last September, a heavily armed gunman opened fire on a high-speed Amsterdam-Paris train, but he was overpowered by two young American soldiers and their companion.