0

xml は次のとおりです。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tutorial xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<!--  ************************************** DAY 1 MODULE 1 **************************** -->

<qn day="1" module="1" id="1"  qntxt="Day 1 Mod 1 First qn?" ans="Answer 3" desc="The Correct answer is Answer3 because...">
        <opt id="Answer 1"></opt>
        <opt id="Answer 2"></opt>
        <opt id="Answer 3"></opt>
        <opt id="Answer 4"></opt>
</qn>
<qn day="1" module="1" id="2" qntxt="Day 1 Mod 1 Second qn?" ans="Answer 22" desc="The Correct answer is Answer1 because...">
        <opt id="Answer 21"></opt>
        <opt id="Answer 22"></opt>
        <opt id="Answer 23"></opt>
        <opt id="Answer 24"></opt>
</qn>
<qn day="1" module="1" id="3" qntxt="Day 1 Mod 1 Third qn?" ans="Answer 34" desc="The Correct answer is Answer4 because...">
        <opt id="Answer 31"></opt>
        <opt id="Answer 32"></opt>
        <opt id="Answer 33"></opt>
        <opt id="Answer 34"></opt>
</qn>

DayID、ModuleID を解析してデータベースに挿入しています。これはうまくいきます。これに加えて、「Total Number of Questions」を挿入しました。これは、各 qn ノードの下の「opt」子ノードの数です。どうすればこれを入手できますか?

function xmlParser(data) {

            dropTable();
            createTable();

            xml = data;
            var dayID, moduleID;
                $(xml).find('day').each(function()
                {
                    **alert($(this).children.length);**
                     dayID = $(this).attr('id');
                    $(this).find("module").each(function()
                    {



                         moduleID = $(this).attr('id');


                             DayID = dayID;  
                             ModuleID = moduleID;  
                             //CurScore = 0;
                             //HighScore = 0;

                            //alert(dayID +'--' + moduleID);
                            insertRecord(dayID,moduleID,0,0,0);
                    });

                });
        }

私が使用する - $(this).children.length; -しかし、それは間違った値を与えます-私は2を取得します-実際の値は4になります.

さらにループしたり、コードを大幅に変更したりせずに、どうすればこれを取得できますか?

4

2 に答える 2

0

これを試してみてください:- http://jsfiddle.net/adiioo7/sPRgR/

HTML:-

<div id="test">
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tutorial xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<!--  ************************************** DAY 1 MODULE 1 **************************** -->

<qn day="1" module="1" id="1"  qntxt="Day 1 Mod 1 First qn?" ans="Answer 3" desc="The Correct answer is Answer3 because...">
        <opt id="Answer 1"></opt>
        <opt id="Answer 2"></opt>
        <opt id="Answer 3"></opt>
        <opt id="Answer 4"></opt>
</qn>
<qn day="1" module="1" id="2" qntxt="Day 1 Mod 1 Second qn?" ans="Answer 22" desc="The Correct answer is Answer1 because...">
        <opt id="Answer 21"></opt>
        <opt id="Answer 22"></opt>
        <opt id="Answer 23"></opt>
        <opt id="Answer 24"></opt>
</qn>
<qn day="1" module="1" id="3" qntxt="Day 1 Mod 1 Third qn?" ans="Answer 34" desc="The Correct answer is Answer4 because...">
        <opt id="Answer 31"></opt>
        <opt id="Answer 32"></opt>
        <opt id="Answer 33"></opt>
        <opt id="Answer 34"></opt>
</qn>
    </div>

JS:-

$(function(){
    var xml = $("#test").html();
    var xmlDoc = $.parseXML( xml );
    $(xmlDoc).find("qn").each(function(){
        alert($(this).find("opt").length);
    });    
});
于 2013-02-22T08:04:09.873 に答える
0

特定のタグを探している場合、私たちの場合opt、選択としてそれを に渡す必要があり.children()ます。ただし、あなたの場合、関数オブジェクトの長さを取っています(children関数オブジェクトであるchildren('opt')か、その関数children()の呼び出しです)

$(xmlDoc).find("qn").each(function(){
    numberOfQuestions = $(this).children("opt").length;
});    

.find()特定のケースでは、を使用するとまったく同じ数が得られることに注意してください。ただし、両者には違いがあります。find選択範囲からツリーの一番下まで DOM をトラバースします。それは、XMLが次のように変更された場合です

<qn day="1" module="1" id="1"  qntxt="Day 1 Mod 1 First qn?" ans="Answer 3" desc="The Correct answer is Answer3 because...">
        <opt id="Answer 1">
             <qn day="1" module="1" id="1"  qntxt="Day 1 Mod 1 First qn?" ans="Answer 3" desc="The Correct answer is Answer3 because...">
                   <opt id="Answer 1"></opt>
                   <opt id="Answer 2"></opt>
                   <opt id="Answer 3"></opt>
                   <opt id="Answer 4"></opt>
            </qn>
        </opt>
        <opt id="Answer 2"></opt>
        <opt id="Answer 3"></opt>
        <opt id="Answer 4"></opt>
</qn>

次に、使用find('opt')すると8つの要素が選択されますが、使用children('opt')すると4つしか取得できません。詳細については、これを参照してください.children(\[selector\])

于 2013-02-22T08:08:36.967 に答える