2012-09-10 3 views
1

XML을 파싱하는 데 도움을 요청한 오늘 (Old Question) 전 게시했습니다. 그 당시 해결책이 내 문제를 완전히 해결하지 못했다는 것을 깨닫지 못했습니다.jQuery에서 XML 파싱

내 문제는 개별 요소를 찾아서 XML을 구문 분석 할 수 있지만 각 항목의 수준을 기록해야한다는 것입니다. 아이템과 카테고리의 수는 각 XML 문서에 따라 다르지만 모두 동일한 방식으로 구조화됩니다. 예를 들어

<?xml version="1.0"?> 
<config> 
<game> 
    <title>Dementia</title> 
     <cat> 
      <catTitle>Mild</catTitle> 
      <item>mild-1</item> 
      <item>mild-2</item> 
      <item>mild-3</item> 
     </cat> 
     <cat> 
      <catTitle>Moderate</catTitle> 
      <item>Moderate-1</item> 
      <item>Moderate-2</item> 
      <item>Moderate-3</item> 
     </cat> 
     <cat> 
      <catTitle>Severe</catTitle> 
      <item>Severe-1</item> 
      <item>Severe-2</item> 
     </cat> 
</game> 
, '발견 ("항목")가'사용, 나는 (또한 아래에 있던의 메모를 취할 필요 0,1,2,3,4 등). catTitle도 마찬가지입니다.

그러면이 숫자를 속성으로 지정하려고합니다. 이렇게하면 항목을 기준으로 항목이 해당 항목과 일치하는지 쉽게 비교할 수 있습니다.

사용자가에서 올바른 카테고리로 '항목을'드래그 :

//XML Array 
/////////////////////////////////////// 
function loadXML(){ 
    $.ajax({ 
     type: "GET", 
     url: XML_PATH, 
     dataType: "xml", 
     success: parseXMLtoArray 
     }); 
} 

function parseXMLtoArray(xml){ 

$(xml).find("cat").each(function(idx, v) { 
    categoryArrays[idx] = []; 

    $(v).find("item").each(function(i , vi) { 
     categoryArrays[idx].push($(vi).text()); 
    });    
}); 
console.log(categoryArrays); 
} 
/////////////////////////////////////// 

이의 목적은 내가 스크린 샷을 첨부 한 내용의 더 나은 이해를 제공하기 위해 :

현재 나는 다음이 그 다음에 그것이 맞는지 아닌지에 기초하여, 바닥에 놓일 수 있습니다. Interactive jQuery Test

어떤 도움을 주시면 감사하겠습니다.

답변

1

나는 그것을 알아 냈다. XML을 배열로 구문 분석하고 각 항목에 대한 객체를 생성하여 해당 카테고리의 속성 (.attr)을 추가하여 나중에 호출 할 수 있도록했습니다.

//XML Array 
/////////////////////////////////////// 
function loadXML(){ 
    $.ajax({ 
     type: "GET", 
     url: XML_PATH, 
     dataType: "xml", 
     success: parseXMLtoArray 
     }); 
} 


function parseXMLtoArray(xml){ 

$(xml).find("cat").each(function(idx, v) { 
    categoryArrays[idx] = []; 

    $(v).find("catTitle").each(function(){ 

     //$(xml).find('title:contains("Dimentia")').each(function(){ 
     numberofCategories = numberofCategories+1; 
     tmpCategory = $(this).text(); 
     categoryNames.push(tmpCategory); 

     var $item = $('<div>' + tmpCategory + '</div>').fadeIn('slow').appendTo('#catPile').attr('categoryName', tmpCategory).attr('categoryNum', idx).droppable({ 
      containment: '#content', 
      stack: '#catPile div', 
      cursor: 'move', 
      drop: handleDropEvent 
     }); 

    }); 



    //ITEM PARSING 
     $(v).find("item").each(function(i , vi) { 
      categoryArrays[idx].push($(vi).text()); 

      numberofItems = numberofItems+1; 
      tmpItem = $(this).text(); 

      //Add Item to Array 
      itemNames.push(tmpItem); 

        //UI CREATION and Atrribute setting 
        var $item = $('<div>' + tmpItem + '</div>').fadeIn('slow').appendTo('#itemPile').attr('itemName', tmpItem).attr('categoryNum', categoryArrayNum).draggable({ 
         containment: '#content', 
         stack: '#itemPile div', 
         cursor: 'move', 
         revert: true 
        }); 

        console.log("Item Created: " + tmpItem + " // Item's Category:" + categoryArrayNum) ; 

     }); 


    console.log('-- Category Array Num: ' + categoryArrayNum + ' contains: ' + categoryArrays[categoryArrayNum]); 
    categoryArrayNum++; 
}); 

console.log("// ITEMS ASSIGNED TO CATEGORIES"); 
} 

희망이 있으면 도움이 될 것입니다.