0
<?xml version="1.0"?>
<watchlist timestamp="2013-02-04 17:38:24">
  <team name="Parent">
      <child name="ChildTeam1" team="3">
          <client mnem="c1">5</client>
          <client mnem="c2">0</client>
          <client mnem="c3">1</client>
          <client mnem="c4">1</client>
          <client mnem="c5">2</client>
          <client mnem="c6">6</client>
          <client mnem="c7">0</client>
          <client mnem="c8">0</client>
          <client mnem="c9">1</client>
          <client mnem="c10">0</client>
      </child>
      <child name="ChildTeam2" team="3">
          <client mnem="c1">6</client>
          <client mnem="c2">0</client>
          <client mnem="c3">0</client>
          <client mnem="c4">0</client>
          <client mnem="c5">0</client>
          <client mnem="c6">0</client>
          <client mnem="c7">0</client>
          <client mnem="c8">0</client>
          <client mnem="c9">0</client>
          <client mnem="c10">0</client>
      </child>
  </team>
</watchlist>

jQueryを使用して上記のXMLを解析するのに助けが必要です。親チームとその下に子チームがあります。私の目標は、チームIDが3である親チームの合計c1を合計することです...したがって、上記の例では、c1の合計を取得するために、ChildTeam1で見つかった5とChildTeam2で見つかった6を追加します。 c1で合計11を取得します。

ひねりを加えるには...クライアントのmnem属性は定期的に変更されるため、「c1」をフィルタリングするようにハードコーディングすることはできません。その部分を動的にプルする必要があります。ただし、子供の下には常に正確に10人のクライアントがいることを私は知っています。

何か案は?

チーム3のc1の合計を正しく計算するこれまでのコードでは、mnem属性のフィルターを使用しています(mnemが変更されたために回避しようとしています)。

function parseXml(data) {
var count1 = 0;
    $(data).find("child[team='3']").each(function(child) {
        count1 += parseInt($(this).find("client[mnem='c1']").text(), 10);
    });
    alert(count1); //output total c1 for team 3
}

更新-以下の最終的な解決策

function parseXml(data) {
    var i = 0; 
    var mnemonic = new Array();

    //build array of the 10 mnemonics, with mnemonic as key value
    $(data).find("client").each(function(){ 
        if ( i < 10 ) {
            mnemonic[$(this).attr('mnem')] = 0; //set default count to 0
            i++;
        } else { return false; } //break .each loop
    });

    //find all children where team = 3, and add the numbers up for each client mnemonic
    $(data).find("child[team='3']").each(function() {
        for(var index in mnemonic) {
            //add to the count
            mnemonic[index] +=     parseInt($(this).find("client[mnem="+index+"]").text(), 10);
        }
    });

    //output the results
    for(var index in mnemonic) {
        $("#output").append( index + " : " + mnemonic[index] + "<br />");
    }
}
4

2 に答える 2

1

他のものに変更c1するのに問題がありますか?これは、セレクターで文字列を編集するだけの問題です。

function parseXml(data) {
    var count = 0,
        teamnum = 3,
        counter = 'c1';
    $(data).find("child[team="+count+"]").each(function(i,el) {
        count1 += parseInt($(this).find("client[mnem="+counter+"]").text(),10);
    });
    alert(count1); //output total c1 for team 3
}
于 2013-02-05T17:27:18.913 に答える
0

"client[mnem='c1']"に置き換えることで、mnemを非常に簡単に処理できます"client[" + attrname +"='c1']"。他に必要なものはありましたか?

于 2013-02-05T17:26:56.713 に答える