জাভাস্ক্রিপ্ট ব্যবহার করে এক্সএমএলকে জেএসএন (এবং ফিরে) এ রূপান্তর করুন


145

আপনি কীভাবে এক্সএমএল থেকে জেএসএন এবং আবার এক্সএমএলে রূপান্তর করবেন?

নিম্নলিখিত সরঞ্জামগুলি বেশ ভালভাবে কাজ করে তবে সম্পূর্ণরূপে সুসংগত নয়:

এর আগে কি কেউ এই পরিস্থিতির মুখোমুখি হয়েছে?


8
অসঙ্গতিগুলি ব্যাখ্যা করুন, দয়া করে
জোশ স্টোডোলা

4
বিশেষত, জেএসওএন অ্যারেগুলি কেবলমাত্র 1 টি উপাদানকে এক্সএমএলে রূপান্তর করতে হয়েছিল। আপনি যখন এটিকে 1-এলিমেন্ট অ্যারের পরিবর্তে জেএসএন-তে রূপান্তর করেছেন, তখন এটি বস্তুটিকে আক্ষরিক তৈরি করেছে। আমি is .isArray () দিয়ে প্রকারটি পরীক্ষা করে এটির চারপাশে কাজ করেছি এবং যদি এটিটিকে একটি অ্যারেতে আবৃত করে! Is। ইসআরে ()।
জেসন সুরেজ

1
xML2json - fyneworks.com/jquery/xML-to-json - 15/02/2013 14:25
এএসটি

Json2xML লিঙ্কটি নষ্ট হয়ে গেছে।
ঘূর্ণি

@ysrb প্লাগইন উদাহরণটি IE8 এ কাজ করবে না!
শহরবাসী

উত্তর:


103

আমি মনে করি এটি সেরা: এক্সএমএল এবং জেএসএনের মধ্যে রূপান্তর

এক্সএমএল.কম ও'রিলি সাইটে অনুগ্রহ করে নিবন্ধটি পড়তে ভুলবেন না , যা এই রূপান্তরগুলির সাথে সমস্যার বিবরণে যায়, যা আমি মনে করি আপনি আলোকিত করবেন। ও'রিলি নিবন্ধটি হোস্ট করছে এমনটি ইঙ্গিত দেয় যে স্টেফান এর সমাধান মেধা আছে।


উত্তরের জন্য ধন্যবাদ! আমার ক্ষেত্রে, জেএসএন হ'ল প্রামাণিক উপস্থাপনা, এবং এক্সএমএল সবেমাত্র এক্সএসএলটি-র জন্য ব্যবহৃত হয় .. যার ব্যবহারটি আমার ধারণা নয়! :)
জেসন সুরেজ

এটি কেবল ব্রাউজারে রয়েছে। নোড.জেএস বা ব্রাউজারবিহীন পরিবেশের জন্য প্রয়োগ করবেন না। অন্য কোন ধারণা?
হোমার 6

1
@ জেসনডিনিজ্যাক তার পোস্টে মন্তব্য করার বিষয়ে, আমি বুঝতে নিশ্চিত নই যে এই লিঙ্কটি কীভাবে একটি আইটেমের অ্যারের পরিবর্তে কোনও বস্তু থাকার বিষয়টি ঠিক করতে সহায়তা করে ...
গুইমি

1
আমি দেখেছি যে আপনি যদি জসন-এক্সএমএল-জসন থেকে শুরু করেন তবে এই গ্রন্থাগারটি ভালভাবে কাজ করে তবে আপনি যদি এক্সএমএল-জসন-এক্সএমএল চান তবে বিপরীতে সমস্যা আছে কারণ এটি মেটাডাটা এক্সএমএল উপাদানগুলি <o> এবং <e>
বিশ

3
দয়া করে নোট করুন যে এটি একটি কপিলফুট লাইসেন্সযুক্ত সমাধান। আপনি যখন ওপেন সোর্স সফটওয়্যারটি লিখছেন তখন এটি কেবলমাত্র একটি বিকল্প।
জ্যাস্পার

48

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);

1
হাই, আপনি কীভাবে এই সমস্যাটি কাটিয়ে উঠলেন যেখানে আপনার যদি কোনও বস্তুতে একটি অবজেক্ট থাকে তবে এটি অবজেক্ট লিটারাল হয়, যেখানে যদি এন> 1 অবজেক্ট থাকে তবে আপনার অ্যারে রয়েছে। এটি টেমপ্লেটগুলিতে
জেসন

হ্যাঁ, আপনার কিছু কৌশল ব্যবহার করা উচিত এবং এটি এক্সএমএল কাঠামো সম্পর্কে আপনার জ্ঞানের উপর নির্ভর করে (কারণ এখানে কোনও এক্সএসডি নেই)। আপনার নোড সবসময় অ্যারে হিসাবে (ক্রম) অ্যাক্সেস করতে <নোড> ... <নোড> _asArray সিনট্যাক্স ব্যবহার করুন
abdolence

1
নমুনা: // এক্সএমএল স্ট্রিং থেকে JSON var xMLText = "<মাইঅপেশন> <পরীক্ষা> সাফল্য </ translation> <test2> <ite2> <item> ddsfg </item> <item> dsdgfdgfd </item> </test2> </Yyperation> "; var jsonObj = X2JS.xML_str2json (xMLText); সতর্কতা (jsonObj.MyOperation.test); সতর্কতা (jsonObj.MyOperation.test_asArray [0]);
আত্মবিশ্বাস

আমার মূল সমস্যাটি হ'ল আমি যখন আমার জসনকে এক্সএমএল পিছনে রূপান্তর করি তখন জসন অতিরিক্ত বৈশিষ্ট্য দ্বারা পরিপূর্ণ হয় এবং স্ট্রিংয়ের এক্সএমএল সংস্করণ সমস্ত অকেজো জিনিস রাখে।
এটিতে

আপনি কি আপনার নমুনা কোড. google.com/p/x2js/issues এ জমা দিতে পারবেন আমি এটি যাচাই করব
শ্রদ্ধা

25

এই উত্তরগুলি এই ফাংশনটি তৈরি করতে আমাকে অনেক সহায়তা করেছে:

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 সংরক্ষণকারী হয়।


3

কিছুক্ষণ আগে আমি আমার টিভি ওয়াচলিস্ট অ্যাপ্লিকেশনটির জন্য এই সরঞ্জামটি https://bitbucket.org/surenrao/xML2json লিখেছি , আশা করি এটিও সহায়তা করবে।

Synopsys: একটি লাইব্রেরি শুধুমাত্র এক্সএমএলকে জসন রূপান্তর করতে পারে না, তবে ডিবাগ করাও সহজ (বিজ্ঞপ্তি ত্রুটি ছাড়াই) এবং জেসনকে আবার এক্সএমএলতে পুনরায় তৈরি করতে পারে। বৈশিষ্ট্যগুলি: - এক্সএসএমএল থেকে জেসন অবজেক্টকে পার্স করুন। জেসসন অবজেক্টটি এক্সএমএলে ফিরে প্রিন্ট করুন। X2J অবজেক্টস হিসাবে সূচকযুক্ত ডিবিতে এক্সএমএল সংরক্ষণ করতে ব্যবহার করা যেতে পারে। জেসন অবজেক্টটি প্রিন্ট করুন।


@ ক্লিওপেট্রা এই লিঙ্কটি সেই সরঞ্জামটির দিকে নির্দেশ করে যা এক্সএমএলকে জসনতে রূপান্তর করে। এটি কোনও রেফারেন্স নয় বরং সংস্থানটির আসল লিঙ্ক। আমার কীভাবে এটি করা উচিত তা নিশ্চিত নয় :)
সুর্য

2

আমি ব্যক্তিগতভাবে এই সরঞ্জামটি সুপারিশ করব । এটি 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”}}’

এখানে একটি অনলাইন ডেমো !



1

দাবি অস্বীকার: আমি দ্রুত-এক্সএমএল-পার্সার লিখেছি

এক্সএমএল পার্সার এক্সএমএলকে জেএসএন এবং এর বিপরীতে রূপান্তর করতে সহায়তা করতে পারে। উদাহরণটি এখানে;

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);

: ডি এফএক্সপি এক্সএমএল 2 জেএসএন কনভার্টারের চেয়ে বেশি। দয়া করে এটি পরীক্ষা করুন check
অমিত কুমার গুপ্ত

1

এখানে 'ডকুমেন্টেড এবং খুব বিখ্যাত এনপিএম লাইব্রেরির একটি ভাল সরঞ্জাম যা এক্সএমএল <-> জেএসএস রূপান্তরটি খুব ভালভাবে করে: উপরের প্রস্তাবিত সমাধানগুলির কিছু (সম্ভবত সমস্ত) থেকে আলাদা, এটি এক্সএমএল মন্তব্যেও রূপান্তরিত করে।

var obj = {name: "Super", Surname: "Man", age: 23};

var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);

1

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 এ উত্স দিয়ে পরীক্ষা করুন


0

আমি এক্সএমএলটির একক মান পেতে কেবল এক্সএমএলটোজসন ব্যবহার করছিলাম।
আমি দেখতে পেয়েছি যে নিম্নলিখিতগুলি করা আরও সহজ (যদি এক্সএমএলটি কেবল একবার হয় ..)

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


0

আমি রেজেক্সের উপর ভিত্তি করে একটি পুনরাবৃত্ত ফাংশন তৈরি করেছি, আপনি যদি গ্রন্থাগারটি ইনস্টল করতে না চান এবং ঘটনার পিছনে যুক্তিটি বুঝতে না চান:

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;
}

প্রতিটি লুপের জন্য রেজেক্স ব্যাখ্যা:

  • পুনরায় [0] - এক্সএমএল ফিরিয়ে দিন (যেমন রয়েছে)
  • পুনরায় [1] - এক্সএমএল ট্যাগের নামটি ফিরিয়ে দিন
  • রেস [2] - এক্সএমএল সামগ্রীটি ফেরত দিন
  • পুনরায় [3] - ট্যাগটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে গেলে xML ট্যাগের নামটি ফিরিয়ে দিন return উদাহরণে:<tag />

আপনি এখানে রেইজেক্স কীভাবে কাজ করে তা পরীক্ষা করতে পারেন: https://regex101.com/r/ZJpCAL/1

দ্রষ্টব্য: যদি জসনের একটি অপরিবর্তিত মান সহ একটি কী থাকে তবে এটি সরানো হচ্ছে। এজন্য আমি 9 নং লাইনের শেষে নাল inোকিয়েছি।


-2

ক্লায়েন্ট সাইড হিসাবে সার্ভার সাইডটি ব্যবহার করে এটি করার সর্বোত্তম উপায়টি সমস্ত পরিস্থিতিতে ভাল কাজ করে না। আমি জাভাস্ক্রিপ্ট ব্যবহার করে অনলাইন জসনকে এক্সএমএল এবং এক্সএমএল থেকে জসন কনভার্টর তৈরি করার চেষ্টা করছিলাম এবং আমি প্রায় অসম্ভব বোধ করছিলাম কারণ এটি সমস্ত পরিস্থিতিতে কাজ করছে না। শেষ পর্যন্ত এএসপি.এমভিসিতে নিউটনসফ্ট ব্যবহার করে এটি সার্ভারের পাশ দিয়ে শেষ করেছি। এখানে অনলাইন রূপান্তরকারী http://techfunda.com/Tools/XMLToJson

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.