mata teras
Fungsi XML2JSOBJ menukarkan data XML ke objek JavaScript. Fungsi ini secara rekursif menganalisis setiap nod dokumen XML DOM Tree dan mengembalikan objek JavaScript, yang lebih mudah untuk pengambilan data. -
Walaupun XML2JSOBJ adalah keserasian silang penyemak imbas dan dengan cepat dapat memproses dokumen XML yang besar, ia hanya boleh digunakan apabila ia benar-benar diperlukan. Jika anda hanya mengambil satu atau dua nilai nod XML, lebih cepat menggunakan kaedah DOM atau XPath. -
Proses menukar XML ke objek JavaScript melibatkan parsing data XML dan menukarnya ke dalam format yang dapat difahami dan dimanipulasi oleh JavaScript. Ini membolehkan akses dan operasi data yang lebih intuitif dan cekap. -
Dalam artikel sebelumnya "Cara Membuat XML ke JSON Proxy Server dengan PHP", kami mencipta sistem yang menukarkan mesej XML ke JSON yang terdapat di AJAX. Ini hebat jika anda menjalankan PHP atau proses sisi pelayan yang sesuai. Tetapi bagaimana jika anda terhad kepada JavaScript? Akses rawak ke data dalam dokumen XML tidak menarik. Anda boleh menggunakan kaedah DOM atau XPath, tetapi mereka tidak semudah sifat objek JavaScript asli (JSON) seperti myObj.list [0] .property1. Jika anda sering mengakses data dalam dokumen XML yang sama, mungkin lebih praktikal untuk mengubahnya menjadi objek JavaScript terlebih dahulu. Adakah anda bersedia menulis kod? ...
fungsi xml2jsobj
Kami akan menulis fungsi yang menganalisis setiap nod dokumen XML Dom Tree dan mengembalikan objek JavaScript. Fungsi ini melepasi nod permulaan (biasanya dokumentasi akar) dan mengembalikan objek (data bernama dalaman):
function XML2jsobj(node) {
var data = {};
// 添加值
function Add(name, value) {
if (data[name]) {
if (data[name].constructor != Array) {
data[name] = [data[name]];
}
data[name][data[name].length] = value;
} else {
data[name] = value;
}
};
// 元素属性
var c, cn;
for (c = 0; cn = node.attributes[c]; c++) {
Add(cn.name, cn.value);
}
// 子元素
for (c = 0; cn = node.childNodes[c]; c++) {
if (cn.nodeType == 1) {
if (cn.childNodes.length == 1 && cn.firstChild.nodeType == 3) {
// 文本值
Add(cn.nodeName, cn.firstChild.nodeValue);
} else {
// 子对象
Add(cn.nodeName, XML2jsobj(cn));
}
}
}
return data;
}
Salin selepas log masuk
penukaran xml
Panggilan Ajax kami boleh mengambil XML dari perkhidmatan web:
// 示例 XML 提要
var url = "example.xml";
// AJAX 请求
var xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
xhr.onreadystatechange = XHRhandler;
xhr.open("GET", url, true);
xhr.send(null);
Salin selepas log masuk
XMLHTTPREQUEST kami OnreadyStateChange Handler menerima data XML dan mengubahnya menjadi objek JavaScript:
// 处理响应
function XHRhandler() {
if (xhr.readyState == 4) {
var obj = XML2jsobj(xhr.responseXML.documentElement);
// 对返回的数据执行某些操作...
console.log(obj);
xhr = null;
}
}
Salin selepas log masuk
jadi, jika contoh.xml mengembalikan data XML berikut:
<?xml version="1.0"?><statuses><status><id>1</id><text>Hello!</text></status></statuses>
Salin selepas log masuk
xml2jsobj (xhr.responsexml.documentElement) akan mengembalikan objek berikut:
{
status: {
id: ["one", 1],
text: "Hello!"
}
}
Salin selepas log masuk
Oleh itu, anda boleh menggunakan obj.status.text untuk mengambil "Hello!"
Langkah berjaga -jaga
beberapa nota mengenai xml2jsobj:
- Tidak ada perbezaan antara atribut XML dan elemen kanak -kanak - jika mereka mempunyai nama yang sama, pelbagai item akan dikembalikan, di mana atribut berada di Indeks 0.
- xml2jsobj harus digunakan hanya jika ia benar -benar diperlukan. Jika anda hanya mengambil satu atau dua nilai nod XML, lebih cepat menggunakan kaedah DOM atau XPath.
- Kod ini bersesuaian dengan penyemak imbas (termasuk IE6) dan dengan cepat dapat memproses dokumen XML yang besar. Yang berkata, ia mungkin tidak berfungsi dalam semua kes. Ia sepatutnya tidak diutamakan untuk mengembalikan JSON dari pelayan.
anda boleh melihat halaman demo atau muat turun kod dan contoh untuk digunakan dengan projek anda sendiri. Saya harap anda dapati ia berguna - jika anda mendapati ia mengurangkan beberapa teka -teki XML, beritahu saya!
Soalan Lazim pada Menukar XML ke Objek JavaScript (Bahagian ini telah diselaraskan dan diselaraskan berdasarkan teks asal untuk mengelakkan pertindihan)
bahagian kandungan ini diulang dari teks asal dan telah ditinggalkan. Kandungan FAQ dalam teks asal berlebihan dan tidak berkorelasi dengan contoh kod, jadi ia diselaraskan dalam proses pseudo-asal.
Atas ialah kandungan terperinci Cara menukar XML ke objek JavaScript seperti JSON. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!