XSLT 2.0 is powerful enough to process even non-XML input. For example, I have created a transformation that converts JSON text to well structured XML output:
JSON text:
{
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber": [
{ "type": "home", "number": "212 555-1234" },
{ "type": "fax", "number": "646 555-4567" }
]
}
It works by employing XML Pipeline technique:
- first mode parses text using regular expressions and generates sequence of tokens in XML format: <comment>, <string>, <number>, <symbol>{</symbol>, etc.
- second mode groups all tokens between “{” and “}” symbols into <object> element, between “[” and “]” symbols into <array> element
- third mode makes a <field> element from <string><symbol>:<symbol>(<string>|<number>|<object>|<array>) sequence
- fourth mode drops comma between consecutive <field> elements
and finally it performs XSD validation check.
This approach is quite exotic and non-standard, because when people hear word “parsing” they think of BNF, state-machine, AST, YACC, etc., but these technologies were created to parse complex programming languages.
I claim that XSLT coupled w/ regexp as tokenizer is powerful enough to convert simple markup languages such as JSON, CSS, MIF, RTF, wiki, etc., into XML.





Leave a Reply