章節(jié)段落
本文章向大家介紹使用JavaScript怎么將XML與JSON進(jìn)行轉(zhuǎn)換的基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下。
創(chuàng)新互聯(lián)長期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為塔河企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,塔河網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
JavaScript是一種直譯式的腳本語言,其解釋器被稱為JavaScript引擎,是瀏覽器的一部分,JavaScript是被廣泛用于客戶端的腳本語言,最早是在HTML網(wǎng)頁上使用,用來給HTML網(wǎng)頁增加動(dòng)態(tài)功能。
XML轉(zhuǎn)換成JSON的格式大概如下:
XML形式
文章標(biāo)題 章節(jié)標(biāo)題 章節(jié)段落
JSON表現(xiàn)形式
{ "article": { "header": { "#text": "文章標(biāo)題", "@id": "h2" }, "section": { "@id": "s1", "header": "章節(jié)標(biāo)題", "p": "章節(jié)段落" } } }
用Js將XML轉(zhuǎn)換成JSON的腳本,在網(wǎng)上找了一些現(xiàn)成的腳本,但大都只滿足比較簡單的情況,都不可以完成保證原始結(jié)構(gòu)的互轉(zhuǎn)。下面是從網(wǎng)上找到的一些腳本或者文章:
x2js : https://code.google.com/p/x2js/
jsonxml :http://davidwalsh.name/convert-xml-json
JKL.ParseXML :http://www.kawa.net/works/js/jkl/parsexml-e.html
x2js不會(huì)將下面的XML正確還原。
//XML形式章節(jié)段落
而第2個(gè)腳本jsonxml,在上面這種“文本混合標(biāo)簽”的情況下,沒有將標(biāo)簽提取出來,而是轉(zhuǎn)換成了下面這種格式。
{"p":"章節(jié)段落"}}
之后我做了些改動(dòng),將它解析成如下格式后,滿足了“文本混合標(biāo)簽”可正確還原的情況。
{"p":[{"strong":"章節(jié)"},"段",{"em":"落"}]}
另外,形如下面的代碼,使用上文提到的腳本進(jìn)行轉(zhuǎn)換,也會(huì)導(dǎo)致無法正確還原的情況。
第一節(jié) 標(biāo)題 第二節(jié)
同樣,在一個(gè)標(biāo)簽內(nèi),它的子標(biāo)簽出現(xiàn)了大于一次,如果需要記錄數(shù)據(jù)的路徑,應(yīng)該使用數(shù)組來保存這個(gè)結(jié)構(gòu)。正確的代碼應(yīng)該是:
{ "article": [ { "section": { "#text": "第一節(jié)", "@id": "s1" }, }, { "header": { "#text": "標(biāo)題", "@id": "h2" } }, { "section": { "#text": "第一節(jié)", "@id": "s2" } } ] }
jkl.parsexml
10036 NY New York Broadway
SAMPLE SCRIPT:
OUTPUT JSON:
{ items: { item: { zip_cd: "1000001" us_state: "NY", us_city: "New York", us_dist: "Broadway", } } };
jsonxml
// Changes XML to JSON function xmlToJson(xml) { // Create the return object var obj = {}; if (xml.nodeType == 1) { // element // do attributes if (xml.attributes.length > 0) { obj["@attributes"] = {}; for (var j = 0; j < xml.attributes.length; j++) { var attribute = xml.attributes.item(j); obj["@attributes"][attribute.nodeName] = attribute.nodeValue; } } } else if (xml.nodeType == 3) { // text obj = xml.nodeValue; } // do children if (xml.hasChildNodes()) { for(var i = 0; i < xml.childNodes.length; i++) { var item = xml.childNodes.item(i); var nodeName = item.nodeName; if (typeof(obj[nodeName]) == "undefined") { obj[nodeName] = xmlToJson(item); } else { if (typeof(obj[nodeName].push) == "undefined") { var old = obj[nodeName]; obj[nodeName] = []; obj[nodeName].push(old); } obj[nodeName].push(xmlToJson(item)); } } } return obj; };
The major change I needed to implement was using attributes.item(j) instead of the attributes[j] that most of the scripts I found used. With this function, XML that looks like:
...becomes workable a JavaScript object with the following structure:
{ "@attributes": { AID: "=", HOME: 0, URL: "davidwalsh.name/", VER: "0.9", }, SD = [ { "@attributes": { FLAGS: "", HOST: "davidwalsh.name", TITLE: A }, LINKSIN: { "@attributes": { NUM: 1102 } }, SPEED: { "@attributes": { PCT: 51, TEXT: 1421 } }, TITLE: { "@attributes": { TEXT: "David Walsh Blog :: PHP, MySQL, CSS, Javascript, MooTools, and Everything Else", } }, }, { POPULARITY: { "@attributes": { TEXT: 7131, URL: "davidwalsh.name/" } }, RANK: { "@attributes": { DELTA: "-1648" } }, REACH: { "@attributes": { RANK = 5952 } } } ] }
說了半天下面整理了一個(gè)例子
function xmlToJson(xml) { // Create the return object var obj = {}; if (xml.nodeType == 1) { // element // do attributes if (xml.attributes.length > 0) { obj["@attributes"] = {}; for (var j = 0; j < xml.attributes.length; j++) { var attribute = xml.attributes.item(j); obj["@attributes"][attribute.nodeName] = attribute.nodeValue; } } } else if (xml.nodeType == 3) { // text obj = xml.nodeValue; } // do children if (xml.hasChildNodes()) { for (var i = 0; i < xml.childNodes.length; i++) { var item = xml.childNodes.item(i); var nodeName = item.nodeName; if (typeof (obj[nodeName]) == "undefined") { obj[nodeName] = xmlToJson(item); } else { if (typeof (obj[nodeName].length) == "undefined") { var old = obj[nodeName]; obj[nodeName] = []; obj[nodeName].push(old); } obj[nodeName].push(xmlToJson(item)); } } } return obj; };
以上就是小編為大家?guī)淼氖褂肑avaScript怎么將XML與JSON進(jìn)行轉(zhuǎn)換的全部內(nèi)容了,希望大家多多支持創(chuàng)新互聯(lián)!