2017-03-17 66 views
0

如何在OpenUI5中從XMLModel獲取數組?在OpenUI5中從XMLModel獲取數組?

我想:從RESULT2

this.oXmlModel = new XMLModel(); 
    this.oXmlModel.setXML('\ 
    <data>\ 
     <items>\ 
     <item><text1>text 1.1</text1><text2>text 1.2</text2></item>\ 
     <item><text1>text 2.1</text1><text2>text 2.2</text2></item>\ 
     </items>\ 
    </data>\ 
    '); 

    var result1 = oXmlModel.getProperty("/items")); 
    var result2 = oXmlModel.getProperty("/items/item")); 

路徑正在與bindItems的表。但getProperty與它返回文本格式的所有子節點。

工作實施例: http://embed.plnkr.co/wa0oBXbq6Exfj3NqNKmQ/(見UI/App.controller.js)

回答

0

XML沒有陣列和定義的列表爲多個元件。您必須使用getObject方法,它將返回給定屬性的XML對象。然後您將必須通過轉換例程將此XML轉換爲JSON。這裏是一個基於XML到JSON的轉換器David Walsh's blog post

onInit: function (evt) { 
    ... 
    ... 
    var result1 = this.oXmlModel.getObject("/items"); 
    console.log(this.xmlToJson(result1)); 
    ... 
}, 

xmlToJson : function(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; 
} 
+0

謝謝,這是有用的代碼和鏈接。 但在我的特殊情況下,我需要獲取所有XML子元素作爲JS數組,並在稍後將它們返回給XML元素(替換已修改)。 此外,現在我認爲,只是複製任何形式的子元素並稍後將其替換回來,都可以。因爲我的需要是備份項目,並返回它們,如果用戶取消更改。 – endrx

+0

對於爲您的XML代碼創建數組的自定義分析器來說,這是可能的,但它對於某個特定的XML塊結構是有點固定的。 –