আমার ধারণা আমি পার্টিতে কিছুটা দেরি করেছি তবে এই কাজটি সম্পাদন করার জন্য আমি একটি ছোট ফাংশন লিখেছি। এটি বৈশিষ্ট্যগুলি, পাঠ্য সামগ্রী এবং একই নোড-নামযুক্ত একাধিক নোড ভাই-বোন হয়ে থাকলেও তার যত্ন নেয়।
দাবি অস্বীকার:
আমি পিএইচপি নেটিভ নই, তাই দয়া করে সাধারণ ভুল সহ্য করুন।
function xml2js($xmlnode) {
$root = (func_num_args() > 1 ? false : true);
$jsnode = array();
if (!$root) {
if (count($xmlnode->attributes()) > 0){
$jsnode["$"] = array();
foreach($xmlnode->attributes() as $key => $value)
$jsnode["$"][$key] = (string)$value;
}
$textcontent = trim((string)$xmlnode);
if (count($textcontent) > 0)
$jsnode["_"] = $textcontent;
foreach ($xmlnode->children() as $childxmlnode) {
$childname = $childxmlnode->getName();
if (!array_key_exists($childname, $jsnode))
$jsnode[$childname] = array();
array_push($jsnode[$childname], xml2js($childxmlnode, true));
}
return $jsnode;
} else {
$nodename = $xmlnode->getName();
$jsnode[$nodename] = array();
array_push($jsnode[$nodename], xml2js($xmlnode, true));
return json_encode($jsnode);
}
}
ব্যবহারের উদাহরণ:
$xml = simplexml_load_file("myfile.xml");
echo xml2js($xml);
উদাহরণ ইনপুট (myfile.xML):
<family name="Johnson">
<child name="John" age="5">
<toy status="old">Trooper</toy>
<toy status="old">Ultrablock</toy>
<toy status="new">Bike</toy>
</child>
</family>
উদাহরণ আউটপুট:
{"family":[{"$":{"name":"Johnson"},"child":[{"$":{"name":"John","age":"5"},"toy":[{"$":{"status":"old"},"_":"Trooper"},{"$":{"status":"old"},"_":"Ultrablock"},{"$":{"status":"new"},"_":"Bike"}]}]}]}
বেশিরভাগ মুদ্রিত:
{
"family" : [{
"$" : {
"name" : "Johnson"
},
"child" : [{
"$" : {
"name" : "John",
"age" : "5"
},
"toy" : [{
"$" : {
"status" : "old"
},
"_" : "Trooper"
}, {
"$" : {
"status" : "old"
},
"_" : "Ultrablock"
}, {
"$" : {
"status" : "new"
},
"_" : "Bike"
}
]
}
]
}
]
}
মনে রাখার জন্য প্রশ্ন:
একই ট্যাগ নামের একাধিক ট্যাগ ভাই বোন হতে পারে। অন্যান্য সমাধানগুলি সম্ভবত শেষ ভাইবোন ছাড়া সমস্ত বাদ দেয়। এটি প্রতিটি এবং একক নোড এড়াতে, এমনকি এটির কেবল একটি শিশু থাকলেও একটি অ্যারে যা ট্যাগ-নেমের প্রতিটি উদাহরণের জন্য একটি অবজেক্ট রাখে। (উদাহরণস্বরূপ একাধিক "" উপাদান দেখুন)
এমনকি মূল উপাদানটি, যার মধ্যে একটি বৈধ এক্সএমএল ডকুমেন্টে কেবল একটির উপস্থিত থাকা উচিত উদাহরণস্বরূপ একটি অবজেক্টের সাথে অ্যারের হিসাবে সংরক্ষণ করা হয়, কেবলমাত্র একটি সামঞ্জস্যপূর্ণ ডেটা কাঠামো থাকতে পারে।
এক্সএমএল নোড সামগ্রী এবং এক্সএমএল বৈশিষ্ট্যের মধ্যে পার্থক্য জানাতে প্রতিটি বস্তুর বৈশিষ্ট্যগুলি "$" এবং "_" সন্তানের সামগ্রীতে সংরক্ষণ করা হয়।
সম্পাদনা:
আমি আপনার উদাহরণ ইনপুট ডেটার জন্য আউটপুট দেখাতে ভুলে গেছি
{
"states" : [{
"state" : [{
"$" : {
"id" : "AL"
},
"name" : [{
"_" : "Alabama"
}
]
}, {
"$" : {
"id" : "AK"
},
"name" : [{
"_" : "Alaska"
}
]
}
]
}
]
}
var_dump
কাজ করে।)