2017-03-17 6 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이 더 배열이없고 목록 등 여러 요소를 정의합니다. 주어진 속성에 대한 XML 객체를 반환하는 getObject 메소드를 사용해야 할 것이다. 그런 다음 변환 루틴을 사용하여이 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 블록의 특정 구조에 대해서는 고정되어있을 수 있습니다. –