2017-02-20 65 views
0

我想根據我的JSON生成XML格式,而不是將其從JSON轉換爲XML。在JavaScript中使用JSON構建XML格式

JSON的例子我試圖生成到XML

var jObj = { "Smart Shoes":{ 
     "Product":"Smart Shoes", 
     "Price":24.99, 
     "Quantity":"1x " 
    }, 
    "Denim Jeans":{ 
     "Product":"Denim Jeans", 
     "Price":30, 
     "Quantity":"1x " 
    } 
} 

試圖像下面的格式生成XML。

<xml id="POSCMD" LateProcessing="true"> 
<commands> 
    <injectfieldmacro type="field" name="FIELD_CLEAR"/> 
    forEach(Item in Basket) { 
    <injectdata type="literal" data="{Item.UPC}"/> 
    <injectfieldmacro type="field" name="FIELD_UPC"/> 
    } 
</commands> 
</xml> 

Plnkr

+0

如果你想做到這一點?在瀏覽器中?本地?的NodeJS?一個XML數據庫? – matchew

+0

瀏覽器,xml生成'onclick()'。 – MrNew

+0

請在問題本身[mcve]中提供所有相關代碼,而不是在第三方網站上提供。 –

回答

2

您可以使用JavaScript(或jQuery)以DOM風格的方式直接創建您的XML元素。我覺得這種方法比創建一個字符串要好,因爲這個方法將處理正確的格式和封裝。

下面是JavaScript例如:

var jObj = { "Smart Shoes":{ 
 
     "Product":"Smart Shoes", 
 
     "Price":24.99, 
 
     "Quantity":"1x " 
 
    }, 
 
    "Denim Jeans":{ 
 
     "Product":"Denim Jeans", 
 
     "Price":30, 
 
     "Quantity":"1x " 
 
    } 
 
}; 
 

 
var xml = document.createElement("xml"); 
 
xml.setAttribute("id","POSCMD"); 
 
xml.setAttribute("LateProcessing","true"); 
 
var commands = document.createElement("commands"); 
 
xml.appendChild(commands); 
 
var injFM = document.createElement("injectfieldmacro"); 
 
injFM.setAttribute("type","field"); 
 
injFM.setAttribute("name","FIELD_CLEAR"); 
 
commands.appendChild(injFM); 
 
var injData; 
 
for (var item in jObj) { 
 
    injData = document.createElement("injectdata"); 
 
    injData.setAttribute("type","literal"); 
 
    injData.setAttribute("data",JSON.stringify(jObj[item])); 
 
    injFM = document.createElement("injectfieldmacro"); 
 
    injFM.setAttribute("type","field"); 
 
    injFM.setAttribute("name","FIELD_UPC"); 
 
    commands.appendChild(injData); 
 
    commands.appendChild(injFM); 
 
} 
 

 
// Append XML to DOM 
 
var body = document.getElementsByTagName("body")[0]; 
 
body.appendChild(xml);

我剛寫的代碼粘JSON對象數據到數據字段,因爲它不是關於你如何真的清楚試圖繼續。但是,如果您希望/需要將數據拆分爲多個「injectdata」XML元素,下面的代碼應該至少提供足夠的信息來進行擴展。

編輯:我編輯了代碼段,以便XML直接附加到DOM body標籤。當您運行的代碼片段,如果你對上的iframe點擊和檢查,你應該看到這些元素居然把在DOM:

enter image description here

+0

謝謝,請看看。爲什麼不像其他答案那樣使用字符串? – MrNew

+1

有多個等待來實現這一點。製作一個字符串是最基本的方法。這是「快速和骯髒」,它的工作原理。問題在於字符串格式化可能會變得雜亂和複雜。你的問題措辭的方式,這聽起來像你正在尋找一個不構建字符串的選項。原生JavaScript DOM功能也可用於製作XML。此外,最後的功能只是將XML轉換爲打印到瀏覽器的格式,以顯示它的外觀。這不是解決方案代碼的一部分。 –

+0

謝謝,做了一點改變。而不是'document.write'有沒有辦法在IE7中追加XML?目前它編寫的是XML,但是它封裝在'「」' – MrNew

0

快速和骯髒。

var gen = function() { 
    var jObj = {"Smart Shoes":{"Product":"Smart Shoes","Price":24.99,"Quantity":"1x "},"Denim Jeans":{"Product":"Denim Jeans","Price":30,"Quantity":"1x "}} 
    var xmlString = '<xml id="POSCMD" LateProcessing="true"><commands><injectfieldmacro type="field" name="FIELD_CLEAR"/>'; 

    for (var item in jObj) { 
     if (jObj.hasOwnProperty(item)) { 
     xmlString += '<injectdata type="literal" data="' + jObj[item].Price + '"/>'; // I don't know where you got UPC from 
     xmlString += '<injectfieldmacro type="field" name="FIELD_UPC"/>' 
     } 
    } 

    xmlString += '</commands></xml>'; 

    console.log(xmlString); 
} 

這將產生有效的XML,像這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<xml id="POSCMD" LateProcessing="true"> 
    <commands> 
     <injectfieldmacro type="field" name="FIELD_CLEAR" /> 
     <injectdata type="literal" data="24.99" /> 
     <injectfieldmacro type="field" name="FIELD_UPC" /> 
     <injectdata type="literal" data="30" /> 
     <injectfieldmacro type="field" name="FIELD_UPC" /> 
    </commands> 
</xml> 

我會,但是建議轉換你的對象/數組到XML。