1

XML を解析するためのヘルプを求めて、今日投稿しました ( Old Question )。その時点では、このソリューションで問題が完全に解決されないことに気づきませんでした。

私の問題は、個々の要素を見つけて 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>

たとえば、'find("item")' を使用する場合、それがどの下にあったか (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);
}
///////////////////////////////////////

この目的をよりよく理解するために、スクリーンショットを添付しました。

ユーザーは「アイテム」を下部の正しいカテゴリにドラッグし、正しいかどうかに基づいてドロップ可能になります。 インタラクティブな jQuery テスト

どんな助けでも大歓迎です!

4

1 に答える 1

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");
}

これが誰かを助けることを願っています!

于 2012-09-12T15:06:25.460 に答える