2012-09-10 70 views
1

我今天早些時候發佈了(Old Question),請求幫助解析XML。當時我沒有意識到解決方案沒有完全解決我的問題。在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"); 
} 

希望這可以幫助別人!