2016-12-20 5 views
0

나는 기록의 배열에 다음 XML을 변환 할 :jquery를 사용하여 XML을 레코드 배열로 변환하는보다 효율적인 방법은 무엇입니까?

<messages> 
    <message> 
    <id>1653</id> 
    <text>AAA</text> 
    </message> 
    <message> 
    <id>1659</id> 
    <text>BBB</text> 
    </message> 
    <message> 
    <id>1681</id> 
    <text>CCC</text> 
    </message> 
</messages> 

내가 매우 효율적 생각하지 않는 쿼리 솔루션 (아래)이있다. 나는 each() 루프 내에서 다른 find 일에

(1) 리조트가 없어야하고,

(2) 다시 한번 $this을 포장 할 것 같다. 더 좋은 방법이 있습니까? 당신의 포인트 plunker

답변

0

var xmlDoc = $.parseXML(sXml); 

var a = []; 
var test = $(xmlDoc).find('message').each(function(index, xmlRec) { 
    a.push({ 
     id: $(this).find('id').text(), 
     text: $(this).find('text').text() 
    }) 
}) 

확인 절대적으로 괜찮,와이를 변경하기 위해 할 수있는 일은 없습니다. 내가 제안하는 유일한 개선 $(this)를 반복하지 않도록하는 대신 each()의 배열을 만들 수 map()를 사용하고 현재 노드를 캐시하는 것입니다

var xmlDoc = $.parseXML(sXml); 
var a = $(xmlDoc).find('message').map(function() { 
    var $node = $(this); 
    return { 
     id: $node.find('id').text(), 
     text: $node.find('text').text() 
    }; 
}).get();