XML با جاوااسکریپت
کار کامل با XML در جاوااسکریپت — پارس، ویرایش، XPath و مقایسه با JSON
جاوااسکریپت و XML
جاوااسکریپت ابزارهای داخلی خوبی برای کار با XML دارد. در این درس همه چیزهایی که در مرورگر نیاز دارید را یکجا مرور میکنیم:
۱. پارس XML با DOMParser
const xmlText = `<books>
<book category="web"><title>XPath</title></book>
<book category="dev"><title>XML Guide</title></book>
</books>`;
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, "text/xml");
// بررسی خطا
const error = xmlDoc.querySelector("parsererror");
if (error) {
console.error("سند نامعتبر:", error.textContent);
}
۲. پیمایش عناصر
// با نام تگ
const books = xmlDoc.getElementsByTagName("book");
// با CSS Selector (روی XML هم کار میکند!)
const webBooks = xmlDoc.querySelectorAll('book[category="web"]');
// فرزندان و والد
const firstBook = books[0];
const title = firstBook.children[0]; // اولین فرزند
const parent = firstBook.parentNode; // والد
// متن و ویژگی
console.log(title.textContent); // "XPath"
console.log(firstBook.getAttribute("category"));
۳. ویرایش سند
// افزودن عنصر جدید
const newBook = xmlDoc.createElement("book");
newBook.setAttribute("category", "database");
const newTitle = xmlDoc.createElement("title");
newTitle.textContent = "SQL Guide";
newBook.appendChild(newTitle);
xmlDoc.documentElement.appendChild(newBook);
// حذف عنصر
books[0].parentNode.removeChild(books[0]);
۴. تبدیل XML به متن
const serializer = new XMLSerializer();
const xmlString = serializer.serializeToString(xmlDoc);
console.log(xmlString);
۵. XPath در جاوااسکریپت
// انتخاب با document.evaluate
const result = xmlDoc.evaluate(
"//book[price > 30]/title", // عبارت XPath
xmlDoc, // گره شروع
null, // resolver فضای نام
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
);
const title = result.singleNodeValue;
console.log(title.textContent);
۶. دریافت XML از سرور
// روش ۱: XMLHttpRequest با responseXML
const xhr = new XMLHttpRequest();
xhr.open("GET", "data.xml");
xhr.onload = () => {
const xmlDoc = xhr.responseXML; // آماده پارسشده!
};
xhr.send();
// روش ۲: fetch + DOMParser
const res = await fetch("data.xml");
const text = await res.text();
const xmlDoc = new DOMParser().parseFromString(text, "text/xml");
۷. XML به JSON و برعکس
تبدیل دستی ساده:
function xmlToJson(xmlNode) {
const obj = {};
for (const child of xmlNode.children) {
obj[child.tagName] = child.textContent;
}
return obj;
}
const bookJson = xmlToJson(books[0]);
// { title: "XPath", price: "35" }
مقایسه نهایی: XML یا JSON در جاوااسکریپت؟
| کار | XML | JSON |
|---|---|---|
| پارس | DOMParser | JSON.parse (بومی و سریعتر) |
| ساخت | DOM API (پرزحمت) | JSON.stringify |
| دسترسی | پیمایش گره | پراپرتی شی |
| حجم | بیشتر | کمتر |
در جاوااسکریپت مدرن، JSON برای داده معمولی انتخاب طبیعی است؛ اما وقتی سرور یا سرویس بیرونی XML میدهد (فید RSS، سرویس سازمانی، فایل SVG)، حالا تمام ابزارهای لازم برای کار با آن را بلدید!
این مبحث بخشی از دوره آموزش کامل XML است.