আপনি কীভাবে এক্সএমএল থেকে জেএসএন এবং আবার এক্সএমএলে রূপান্তর করবেন?
নিম্নলিখিত সরঞ্জামগুলি বেশ ভালভাবে কাজ করে তবে সম্পূর্ণরূপে সুসংগত নয়:
এর আগে কি কেউ এই পরিস্থিতির মুখোমুখি হয়েছে?
আপনি কীভাবে এক্সএমএল থেকে জেএসএন এবং আবার এক্সএমএলে রূপান্তর করবেন?
নিম্নলিখিত সরঞ্জামগুলি বেশ ভালভাবে কাজ করে তবে সম্পূর্ণরূপে সুসংগত নয়:
এর আগে কি কেউ এই পরিস্থিতির মুখোমুখি হয়েছে?
উত্তর:
আমি মনে করি এটি সেরা: এক্সএমএল এবং জেএসএনের মধ্যে রূপান্তর
এক্সএমএল.কম ও'রিলি সাইটে অনুগ্রহ করে নিবন্ধটি পড়তে ভুলবেন না , যা এই রূপান্তরগুলির সাথে সমস্যার বিবরণে যায়, যা আমি মনে করি আপনি আলোকিত করবেন। ও'রিলি নিবন্ধটি হোস্ট করছে এমনটি ইঙ্গিত দেয় যে স্টেফান এর সমাধান মেধা আছে।
https://github.com/abdmob/x2js - আমার নিজস্ব লাইব্রেরি ( http://code.google.com/p/x2js/ থেকে আপডেট হওয়া URL ):
এই লাইব্রেরিটি JSON (জাভাস্ক্রিপ্ট অবজেক্টস) এবং এর বিপরীতে জাভাস্ক্রিপ্ট রূপান্তর ফাংশনগুলিতে এক্সএমএল সরবরাহ করে। গ্রন্থাগারটি খুব ছোট এবং অন্য কোনও অতিরিক্ত গ্রন্থাগারের প্রয়োজন নেই।
এপিআই ফাংশন
- নতুন এক্স 2জেএস () - সমস্ত লাইব্রেরির কার্যকারিতা অ্যাক্সেস করতে আপনার দৃষ্টান্ত তৈরি করতে। এছাড়াও আপনি এখানে configurationচ্ছিক কনফিগারেশন বিকল্পগুলি নির্দিষ্ট করতে পারেন
- এক্স 2জেএস.এক্সএমএল 2 জসন - এক্সএসএমএলকে জেএসএনে ডোম অবজেক্ট হিসাবে নির্দিষ্ট করা হয়েছে
- X2JS.json2xML - জেএসনকে এক্সএমএল ডোম অবজেক্টে রূপান্তর করুন
- X2JS.xML_str2json - এক্সএসএমএল কে JSON এ স্ট্রিং হিসাবে নির্দিষ্ট করা হয়েছে
- X2JS.json2xML_str - জেএসওএনকে এক্সএমএল স্ট্রিংয়ে রূপান্তর করুন
অনলাইন ডেমো http://jsfiddle.net/abdmob/gkxucxrj/1/ এ
var x2js = new X2JS();
function convertXml2JSon() {
$("#jsonArea").val(JSON.stringify(x2js.xml_str2json($("#xmlArea").val())));
}
function convertJSon2XML() {
$("#xmlArea").val(x2js.json2xml_str($.parseJSON($("#jsonArea").val())));
}
convertXml2JSon();
convertJSon2XML();
$("#convertToJsonBtn").click(convertXml2JSon);
$("#convertToXmlBtn").click(convertJSon2XML);
এই উত্তরগুলি এই ফাংশনটি তৈরি করতে আমাকে অনেক সহায়তা করেছে:
function xml2json(xml) {
try {
var obj = {};
if (xml.children.length > 0) {
for (var i = 0; i < xml.children.length; i++) {
var item = xml.children.item(i);
var nodeName = item.nodeName;
if (typeof (obj[nodeName]) == "undefined") {
obj[nodeName] = xml2json(item);
} else {
if (typeof (obj[nodeName].push) == "undefined") {
var old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(xml2json(item));
}
}
} else {
obj = xml.textContent;
}
return obj;
} catch (e) {
console.log(e.message);
}
}
যতক্ষণ আপনি কোনও জেকারি ডোম / এক্সএমএল অবজেক্টে পাস করবেন: আমার কাছে এটি ছিল:
Jquery(this).find('content').eq(0)[0]
যেখানে বিষয়বস্তু ক্ষেত্র আমি আমার XML সংরক্ষণকারী হয়।
কিছুক্ষণ আগে আমি আমার টিভি ওয়াচলিস্ট অ্যাপ্লিকেশনটির জন্য এই সরঞ্জামটি https://bitbucket.org/surenrao/xML2json লিখেছি , আশা করি এটিও সহায়তা করবে।
Synopsys: একটি লাইব্রেরি শুধুমাত্র এক্সএমএলকে জসন রূপান্তর করতে পারে না, তবে ডিবাগ করাও সহজ (বিজ্ঞপ্তি ত্রুটি ছাড়াই) এবং জেসনকে আবার এক্সএমএলতে পুনরায় তৈরি করতে পারে। বৈশিষ্ট্যগুলি: - এক্সএসএমএল থেকে জেসন অবজেক্টকে পার্স করুন। জেসসন অবজেক্টটি এক্সএমএলে ফিরে প্রিন্ট করুন। X2J অবজেক্টস হিসাবে সূচকযুক্ত ডিবিতে এক্সএমএল সংরক্ষণ করতে ব্যবহার করা যেতে পারে। জেসন অবজেক্টটি প্রিন্ট করুন।
আমি ব্যক্তিগতভাবে এই সরঞ্জামটি সুপারিশ করব । এটি JSON রূপান্তরকারী একটি এক্সএমএল।
এটি খুব লাইটওয়েট এবং খাঁটি জাভাস্ক্রিপ্টে রয়েছে। এটির কোনও নির্ভরতার দরকার নেই। আপনি কেবল আপনার কোডগুলিতে ফাংশনগুলি যুক্ত করতে পারেন এবং এটি আপনার ইচ্ছামত ব্যবহার করতে পারেন।
এটি এক্সএমএল বৈশিষ্ট্যগুলিকে বিবেচনায় নিয়ে যায়।
var xml = ‘<person id=”1234” age=”30”><name>John Doe</name></person>’;
var json = xml2json(xml);
console.log(json);
// prints ‘{“person”: {“id”: “1234”, “age”: “30”, “name”: “John Doe”}}’
এখানে একটি অনলাইন ডেমো !
দাবি অস্বীকার: আমি দ্রুত-এক্সএমএল-পার্সার লিখেছি
এক্সএমএল পার্সার এক্সএমএলকে জেএসএন এবং এর বিপরীতে রূপান্তর করতে সহায়তা করতে পারে। উদাহরণটি এখানে;
var options = {
attributeNamePrefix : "@_",
attrNodeName: "attr", //default is 'false'
textNodeName : "#text",
ignoreAttributes : true,
ignoreNameSpace : false,
allowBooleanAttributes : false,
parseNodeValue : true,
parseAttributeValue : false,
trimValues: true,
decodeHTMLchar: false,
cdataTagName: "__cdata", //default is 'false'
cdataPositionChar: "\\c",
};
if(parser.validate(xmlData)=== true){//optional
var jsonObj = parser.parse(xmlData,options);
}
আপনি যদি জেএসএন বা জেএস বস্তুকে এক্সএমএলে পার্স করতে চান তবে
//default options need not to set
var defaultOptions = {
attributeNamePrefix : "@_",
attrNodeName: "@", //default is false
textNodeName : "#text",
ignoreAttributes : true,
encodeHTMLchar: false,
cdataTagName: "__cdata", //default is false
cdataPositionChar: "\\c",
format: false,
indentBy: " ",
supressEmptyNode: false
};
var parser = new parser.j2xParser(defaultOptions);
var xml = parser.parse(json_or_js_obj);
এখানে 'ডকুমেন্টেড এবং খুব বিখ্যাত এনপিএম লাইব্রেরির একটি ভাল সরঞ্জাম যা এক্সএমএল <-> জেএসএস রূপান্তরটি খুব ভালভাবে করে: উপরের প্রস্তাবিত সমাধানগুলির কিছু (সম্ভবত সমস্ত) থেকে আলাদা, এটি এক্সএমএল মন্তব্যেও রূপান্তরিত করে।
var obj = {name: "Super", Surname: "Man", age: 23};
var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);
6 সাধারণ ES6 লাইনে:
xml2json = xml => {
var el = xml.nodeType === 9 ? xml.documentElement : xml
var h = {name: el.nodeName}
h.content = Array.from(el.childNodes || []).filter(e => e.nodeType === 3).map(e => e.textContent).join('').trim()
h.attributes = Array.from(el.attributes || []).filter(a => a).reduce((h, a) => { h[a.name] = a.value; return h }, {})
h.children = Array.from(el.childNodes || []).filter(e => e.nodeType === 1).map(c => h[c.nodeName] = xml2json(c))
return h
}
Https://github.com/brauliobo/bioche রাসায়নিক-echo "xml2json_example()" | node -r xml2json.es6
db/ blob/ master/ lib/ xML2json.es6 এ উত্স দিয়ে পরীক্ষা করুন
আমি এক্সএমএলটির একক মান পেতে কেবল এক্সএমএলটোজসন ব্যবহার করছিলাম।
আমি দেখতে পেয়েছি যে নিম্নলিখিতগুলি করা আরও সহজ (যদি এক্সএমএলটি কেবল একবার হয় ..)
let xml =
'<person>' +
' <id>762384324</id>' +
' <firstname>Hank</firstname> ' +
' <lastname>Stone</lastname>' +
'</person>';
let getXmlValue = function(str, key) {
return str.substring(
str.lastIndexOf('<' + key + '>') + ('<' + key + '>').length,
str.lastIndexOf('</' + key + '>')
);
}
alert(getXmlValue(xml, 'firstname')); // gives back Hank
আমি রেজেক্সের উপর ভিত্তি করে একটি পুনরাবৃত্ত ফাংশন তৈরি করেছি, আপনি যদি গ্রন্থাগারটি ইনস্টল করতে না চান এবং ঘটনার পিছনে যুক্তিটি বুঝতে না চান:
const xmlSample = '<tag>tag content</tag><tag2>another content</tag2><tag3><insideTag>inside content</insideTag><emptyTag /></tag3>';
console.log(parseXmlToJson(xmlSample));
function parseXmlToJson(xml) {
const json = {};
for (const res of xml.matchAll(/(?:<(\w*)(?:\s[^>]*)*>)((?:(?!<\1).)*)(?:<\/\1>)|<(\w*)(?:\s*)*\/>/gm)) {
const key = res[1] || res[3];
const value = res[2] && parseXmlToJson(res[2]);
json[key] = ((value && Object.keys(value).length) ? value : res[2]) || null;
}
return json;
}
প্রতিটি লুপের জন্য রেজেক্স ব্যাখ্যা:
<tag />
আপনি এখানে রেইজেক্স কীভাবে কাজ করে তা পরীক্ষা করতে পারেন: https://regex101.com/r/ZJpCAL/1
দ্রষ্টব্য: যদি জসনের একটি অপরিবর্তিত মান সহ একটি কী থাকে তবে এটি সরানো হচ্ছে। এজন্য আমি 9 নং লাইনের শেষে নাল inোকিয়েছি।
ক্লায়েন্ট সাইড হিসাবে সার্ভার সাইডটি ব্যবহার করে এটি করার সর্বোত্তম উপায়টি সমস্ত পরিস্থিতিতে ভাল কাজ করে না। আমি জাভাস্ক্রিপ্ট ব্যবহার করে অনলাইন জসনকে এক্সএমএল এবং এক্সএমএল থেকে জসন কনভার্টর তৈরি করার চেষ্টা করছিলাম এবং আমি প্রায় অসম্ভব বোধ করছিলাম কারণ এটি সমস্ত পরিস্থিতিতে কাজ করছে না। শেষ পর্যন্ত এএসপি.এমভিসিতে নিউটনসফ্ট ব্যবহার করে এটি সার্ভারের পাশ দিয়ে শেষ করেছি। এখানে অনলাইন রূপান্তরকারী http://techfunda.com/Tools/XMLToJson