আমার একটি পরিবর্তনশীল স্ট্রিং রয়েছে যাতে সুগঠিত এবং বৈধ এক্সএমএল থাকে। এই ফিডটি বিশ্লেষণের জন্য আমার জাভাস্ক্রিপ্ট কোড ব্যবহার করা দরকার।
আমি কীভাবে এটি (ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ) জাভাস্ক্রিপ্ট কোড ব্যবহার করে সম্পন্ন করতে পারি?
আমার একটি পরিবর্তনশীল স্ট্রিং রয়েছে যাতে সুগঠিত এবং বৈধ এক্সএমএল থাকে। এই ফিডটি বিশ্লেষণের জন্য আমার জাভাস্ক্রিপ্ট কোড ব্যবহার করা দরকার।
আমি কীভাবে এটি (ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ) জাভাস্ক্রিপ্ট কোড ব্যবহার করে সম্পন্ন করতে পারি?
উত্তর:
আপডেট: আরও সঠিক উত্তরের জন্য টিম ডাউন এর উত্তর দেখুন ।
ইন্টারনেট এক্সপ্লোরার এবং উদাহরণস্বরূপ, মজিলা ভিত্তিক ব্রাউজারগুলি এক্সএমএল পার্সিংয়ের জন্য বিভিন্ন অবজেক্ট প্রকাশ করে, তাই ক্রস ব্রাউজারগুলির পার্থক্যগুলি পরিচালনা করতে jQuery এর মতো একটি জাভাস্ক্রিপ্ট কাঠামো ব্যবহার করা বুদ্ধিমানের কাজ ।
সত্যিই একটি মৌলিক উদাহরণ:
var xml = "<music><album>Beethoven</album></music>";
var result = $(xml).find("album").text();
দ্রষ্টব্য: মতামত হিসাবে চিহ্নিত; jQuery আসলে কোনও এক্সএমএলকে পার্সিং করে না, এটি ডিওএম ইনারএইচটিএমএল পদ্ধতিতে নির্ভর করে এবং এটি পার্স করবে যেমন কোনও এইচটিএমএল আপনার এক্সএমএলে এইচটিএমএল উপাদানগুলির নাম ব্যবহার করার সময় সতর্কতা অবলম্বন করবে। তবে আমি মনে করি এটি সাধারণ এক্সএমএল 'পার্সিং' এর পক্ষে মোটামুটি ভাল কাজ করে তবে এটি এক্সটেনসিভ বা 'ডায়নামিক' এক্সএমএল পার্সিংয়ের জন্য প্রস্তাবিত নয় যেখানে আপনি এক্সএমএল কী নেমে আসবে এবং এই পরীক্ষাগুলি যদি প্রত্যাশা অনুযায়ী পার্স করে তবে এই পরীক্ষাগুলি নেই।
innerHTML
কোনও উপাদানটির সম্পত্তি হিসাবে নির্ধারিত করে , যা মোটেই নির্ভরযোগ্য নয়।
jQuery()
] পার্স এইচটিএমএল, না এক্সএমএল"
2017 এর জন্য আপডেট হওয়া উত্তর
নিম্নলিখিত সমস্ত প্রধান ব্রাউজারে একটি এক্সএমএল স্ট্রিংকে একটি এক্সএমএল ডকুমেন্টে পার্স করবে। আইই <= 8 বা কিছু অস্পষ্ট ব্রাউজারের জন্য আপনার সমর্থন না থাকলে আপনি নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারেন:
function parseXml(xmlStr) {
return new window.DOMParser().parseFromString(xmlStr, "text/xml");
}
আপনার যদি IE <= 8 সমর্থন করার প্রয়োজন হয় তবে নীচেরগুলি কাজটি করবে:
var parseXml;
if (typeof window.DOMParser != "undefined") {
parseXml = function(xmlStr) {
return new window.DOMParser().parseFromString(xmlStr, "text/xml");
};
} else if (typeof window.ActiveXObject != "undefined" &&
new window.ActiveXObject("Microsoft.XMLDOM")) {
parseXml = function(xmlStr) {
var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(xmlStr);
return xmlDoc;
};
} else {
throw new Error("No XML parser found");
}
একবার আপনার Document
মাধ্যমে প্রাপ্ত হয়ে গেলে parseXml
, আপনি স্বাভাবিক ডিওএম ট্র্যাভারসাল পদ্ধতি / বৈশিষ্ট্যগুলি যেমন childNodes
এবং getElementsByTagName()
আপনার পছন্দগুলি নোডগুলি পেতে ব্যবহার করতে পারেন।
ব্যবহারের উদাহরণ:
var xml = parseXml("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);
আপনি যদি jQuery ব্যবহার করেন তবে সংস্করণ 1.5 থেকে আপনি এর অন্তর্নির্মিত parseXML()
পদ্ধতিটি ব্যবহার করতে পারেন যা উপরের ফাংশনের সাথে কার্যত অভিন্ন।
var xml = $.parseXML("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);
$()
এক্সএমএল পার্সিংয়ের জন্য ব্যবহার না করার জন্য বলে । মন্তব্যগুলি আরও মনোযোগ সহকারে পড়ুন: এটি অনেক পরিস্থিতিতে সহজেই কাজ করে না।
parseXML()
, jQuery এর পদ্ধতিটি একটি স্ট্রিং ব্যবহার করে। উত্তরটি পরিবর্তন করতে আমি কিছুটা সতর্ক থাকি কারণ এখনই এটি পরীক্ষা করার মতো সহজ উপায় আমার কাছে নেই।
ওয়েবে সর্বাধিক উদাহরণ (এবং কিছু উপরে উপস্থাপন) কিভাবে একটি XML লোড করতে দেন একটি ফাইল থেকে একটি ব্রাউজার সামঞ্জস্যপূর্ণ পদ্ধতিতে। document.implementation.createDocument()
পদ্ধতিটি সমর্থন করে না এমন গুগল ক্রোমের ক্ষেত্রে বাদে এটি সহজ প্রমাণিত । কোনও এক্সএমএল ফাইলকে কোনও এক্সএমএল ডকুমেন্ট অবজেক্টে লোড করার জন্য ক্রোম ব্যবহার করার সময় আপনাকে ইনবিল্ট এক্সএমএলএইচটিপি অবজেক্টটি ব্যবহার করতে হবে এবং তারপরে ইউআরআই পাস করে ফাইলটি লোড করতে হবে।
আপনার ক্ষেত্রে, পরিস্থিতিটি আলাদা, কারণ আপনি কোনও ইউআরএল নয়, স্ট্রিং ভেরিয়েবল থেকে এক্সএমএল লোড করতে চান । তবে এই প্রয়োজনের জন্য, ক্রোম অনুমিতভাবে মজিলা (বা তাই শুনেছি) এর মতো কাজ করে এবং পার্সফ্র্যামস্ট্রিং () পদ্ধতিটিকে সমর্থন করে।
এখানে আমি ব্যবহার করছি এমন একটি ফাংশন (এটি বর্তমানে ব্রাউজারের সামঞ্জস্য লাইব্রেরির অংশ) আমি ব্যবহার করছি:
function LoadXMLString(xmlString)
{
// ObjectExists checks if the passed parameter is not null.
// isString (as the name suggests) checks if the type is a valid string.
if (ObjectExists(xmlString) && isString(xmlString))
{
var xDoc;
// The GetBrowserType function returns a 2-letter code representing
// ...the type of browser.
var bType = GetBrowserType();
switch(bType)
{
case "ie":
// This actually calls into a function that returns a DOMDocument
// on the basis of the MSXML version installed.
// Simplified here for illustration.
xDoc = new ActiveXObject("MSXML2.DOMDocument")
xDoc.async = false;
xDoc.loadXML(xmlString);
break;
default:
var dp = new DOMParser();
xDoc = dp.parseFromString(xmlString, "text/xml");
break;
}
return xDoc;
}
else
return null;
}
if(window.ActiveXObject){...}
var dp; try{ dp = new DOMParser() } catch(e) { }; if(dp) { // DOMParser supported } else { // alert('you need to consider upgrading your browser\nOr pay extra money so developer can support the old versions using browser sniffing (eww)') }
।
মার্কনোট হ'ল একটি দুর্দান্ত লাইটওয়েট ক্রস ব্রাউজার জাভাস্ক্রিপ্ট এক্সএমএল পার্সার। এটি অবজেক্ট-ওরিয়েন্টেড এবং এর প্রচুর উদাহরণ পেয়েছে, এপিআই ডকুমেন্টেড। এটি মোটামুটি নতুন, তবে এটি এখনও পর্যন্ত আমার একটি প্রকল্পে দুর্দান্তভাবে কাজ করেছে। আমি এটির বিষয়ে একটি জিনিস পছন্দ করি তা হ'ল এটি সরাসরি স্ট্রিং বা ইউআরএল থেকে এক্সএমএল পড়বে এবং আপনি এটি এক্সএমএলটিকে জেএসওনে রূপান্তর করতে ব্যবহার করতে পারেন।
আপনি মার্কনোটের সাথে কী করতে পারেন তার একটি উদাহরণ এখানে দেওয়া হয়েছে:
var str = '<books>' +
' <book title="A Tale of Two Cities"/>' +
' <book title="1984"/>' +
'</books>';
var parser = new marknote.Parser();
var doc = parser.parse(str);
var bookEls = doc.getRootElement().getChildElements();
for (var i=0; i<bookEls.length; i++) {
var bookEl = bookEls[i];
// alerts "Element name is 'book' and book title is '...'"
alert("Element name is '" + bookEl.getName() +
"' and book title is '" +
bookEl.getAttributeValue("title") + "'"
);
}
আমি সর্বদা নীচের পদ্ধতিটি ব্যবহার করেছি যা আইআই এবং ফায়ারফক্সে কাজ করে।
এক্সএমএল উদাহরণ:
<fruits>
<fruit name="Apple" colour="Green" />
<fruit name="Banana" colour="Yellow" />
</fruits>
javascript:
function getFruits(xml) {
var fruits = xml.getElementsByTagName("fruits")[0];
if (fruits) {
var fruitsNodes = fruits.childNodes;
if (fruitsNodes) {
for (var i = 0; i < fruitsNodes.length; i++) {
var name = fruitsNodes[i].getAttribute("name");
var colour = fruitsNodes[i].getAttribute("colour");
alert("Fruit " + name + " is coloured " + colour);
}
}
}
}
innerText
পরিবর্তে আপনার প্রয়োজনgetAttribute()
দৃশ্যত jQuery এখন 1.5 সংস্করণ হিসাবে jQuery.parseXML http://api.jquery.com/jQuery.parseXML/ সরবরাহ করে
jQuery.parseXML( data )
রিটার্নস: XMLDocument
দয়া করে এক্সএমএল ডোম পার্সার ( ডাব্লু 3 স্কুলস) দেখুন ) দেখুন। এটি এক্সএমএল ডোম পার্সিংয়ের একটি টিউটোরিয়াল। আসল ডোম পার্সার ব্রাউজার থেকে ব্রাউজারে পৃথক হয় তবে ডিওএম এপিআই মানকৃত হয় এবং একই থাকে (কম বা কম)।
আপনি যদি নিজেকে ফায়ারফক্সে সীমাবদ্ধ রাখতে পারেন তবে বিকল্পভাবে E4X ব্যবহার করুন । এটি ব্যবহার করা তুলনামূলকভাবে সহজ এবং সংস্করণ 1.6 থেকে এটি জাভাস্ক্রিপ্টের অংশ। এখানে একটি ছোট নমুনা ব্যবহার ...
//Using E4X
var xmlDoc=new XML();
xmlDoc.load("note.xml");
document.write(xmlDoc.body); //Note: 'body' is actually a tag in note.xml,
//but it can be accessed as if it were a regular property of xmlDoc.
<script language="JavaScript">
function importXML()
{
if (document.implementation && document.implementation.createDocument)
{
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.onload = createTable;
}
else if (window.ActiveXObject)
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.onreadystatechange = function () {
if (xmlDoc.readyState == 4) createTable()
};
}
else
{
alert('Your browser can\'t handle this script');
return;
}
xmlDoc.load("emperors.xml");
}
function createTable()
{
var theData="";
var x = xmlDoc.getElementsByTagName('emperor');
var newEl = document.createElement('TABLE');
newEl.setAttribute('cellPadding',3);
newEl.setAttribute('cellSpacing',0);
newEl.setAttribute('border',1);
var tmp = document.createElement('TBODY');
newEl.appendChild(tmp);
var row = document.createElement('TR');
for (j=0;j<x[0].childNodes.length;j++)
{
if (x[0].childNodes[j].nodeType != 1) continue;
var container = document.createElement('TH');
theData = document.createTextNode(x[0].childNodes[j].nodeName);
container.appendChild(theData);
row.appendChild(container);
}
tmp.appendChild(row);
for (i=0;i<x.length;i++)
{
var row = document.createElement('TR');
for (j=0;j<x[i].childNodes.length;j++)
{
if (x[i].childNodes[j].nodeType != 1) continue;
var container = document.createElement('TD');
var theData = document.createTextNode(x[i].childNodes[j].firstChild.nodeValue);
container.appendChild(theData);
row.appendChild(container);
}
tmp.appendChild(row);
}
document.getElementById('writeroot').appendChild(newEl);
}
</script>
</HEAD>
<BODY onLoad="javascript:importXML();">
<p id=writeroot> </p>
</BODY>
আরও তথ্যের জন্য এই http://www.easycodingclub.com/xML-parser-in-javascript/ জাভাস্ক্রিপ্ট- টিউটোরিয়ালস / দেখুন
দাবি অস্বীকার : আমি দ্রুত-এক্সএমএল-পার্সার তৈরি করেছি
আমি একটি এক্সএমএল স্ট্রিং পার্স করতে দ্রুত-এক্সএমএল-পার্সার তৈরি করেছি JS / JSON অবজেক্ট বা মধ্যবর্তী ট্র্যাভারসাল অবজেক্টে । এটি সমস্ত ব্রাউজারগুলিতে সামঞ্জস্যপূর্ণ বলে আশা করা হচ্ছে (তবে কেবল ক্রোম, ফায়ারফক্স এবং আইইতে এটি পরীক্ষিত) tested
ব্যবহার
var options = { //default
attrPrefix : "@_",
attrNodeName: false,
textNodeName : "#text",
ignoreNonTextNodeAttr : true,
ignoreTextNodeAttr : true,
ignoreNameSpace : true,
ignoreRootElement : false,
textNodeConversion : true,
textAttrConversion : false,
arrayMode : false
};
if(parser.validate(xmlData)){//optional
var jsonObj = parser.parse(xmlData, options);
}
//Intermediate obj
var tObj = parser.getTraversalObj(xmlData,options);
:
var jsonObj = parser.convertToJson(tObj);
দ্রষ্টব্য : এটি ডোম পার্সার ব্যবহার করে না তবে আরআর ব্যবহার করে স্ট্রিংটিকে পার্স করে এবং এটিকে জেএস / জেএসএন বস্তুতে রূপান্তর করে।
আপনি এক্সএমএল স্ট্রিং ম্যানিপুলেট করতে jquery ফাংশন ($। পার্সএক্সএমএল) এর মাধ্যমেও করতে পারেন
উদাহরণ জাভাস্ক্রিপ্ট:
var xmlString = '<languages><language name="c"></language><language name="php"></language></languages>';
var xmlDoc = $.parseXML(xmlString);
$(xmlDoc).find('name').each(function(){
console.log('name:'+$(this).attr('name'))
})