Umiddelbart er der vel ikke videre svært at skrive en funktion der konvertere fra JSON til XML som du så kan give til XSLT.
Mig bekendt er JSON syntaksen ikke tilladt i PHP, men du kunne vel bare bruge array syntaks:
JSON
{
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumbers": [
{ "home": "212 555-1234" },
{ "fax":"646 555-4567" }
]
}
PHP
[
"firstName" => "John",
"lastName" => "Smith",
"age" => 25,
"address" => [
"streetAddress" => "21 2nd Street",
"city" => "New York",
"state" => "NY",
"postalCode" => "10021"
],
"phoneNumbers" => [
[ "type"=>"home", "number" => "212 555-1234" ],
[ "type"=>"fax", "number"=> "646 555-4567" ]
]
]
Eneste forskel er at du skal skrive =>,[,] i stedet for :,{,}
Godt nok skal du så teste om et array har string eller number keys, under antagelse at folk er fornuftige og ikke blander dem i samme array og, at et tomt array er et number keyed array, så burde det her fortælle typen:
function is_num_array(&$arr){
if(count($arr)==0){
return true;
}
$k=key($arr)
if($k===null){
prev($arr);
$k=key($arr);
next($arr);
}
return is_int($key);
}
Og konverterings funktionen kunne se ud nogenlunde som det her:
function php2xslt($nodename,$data){
$str='';
if(is_num_array($data)){
foreach($data as $value){
$str.=php2xlt($nodename,$value);
}
}else{
$str.='<'.$nodename;
$childs='';
foreach($data as $key=>$value){
if(is_array($value)){
$childs.=php2xslt($key,$value);
}else{
$str.=' '.$key.'="'.$value."'";
}
}
if($childs!=''){
$str.='/>'
}else{
$str.='>'.$childs.'</'.$nodename.'>';
}
}
return $str;
}