2011-10-26 10 views
1

私は以下のJQueryコードを持っています。その下には、解析するXMLファイルもあります。ご覧のように、ルートノードはGetArchiveと呼ばれ、Y2012という別のノードが続きます。JQueryトラバースXML。どのように動的にするには?

Y2012は年ノードであり、年のすべての12か月を含むことがあります。毎月多くのエントリーが含まれ、各エントリーには多くのコメントが含まれることがあります。

私の質問は、以下のようにハードコードする必要がないように、私のコードをどのように変更できますか?どうすれば私のコードが何年のノードが存在するかをチェックし、私が下でやっているのと同じようにそれぞれを解析することができますか?

ありがとうございました。

$.get('getArchive.xml', null, function (data) { 

    // PARSE 2012 JANUARY NODES. 

       var ul = $('<ul/>').fadeIn(1000).appendTo('#GetArchive'); 

     var JanEntries = $(data).find('GetArchive Y2012 Jan Entry').each(function(){ 

    var JanEntryId = $(this).find("id").text(); ul.append('<li>' + JanEntryId + '</li>'); 
    var JanEntryDate = $(this).find("date").text(); ul.append('<li>' + JanEntryDate + '</li>'); 
    var JanEntryTime = $(this).find("time").text(); ul.append('<li>' + JanEntryTime + '</li>'); 
    var JanEntrytitle = $(this).find("title").text(); ul.append('<li>' + JanEntrytitle + '</li>'); 
    var JanEntryBody = $(this).find("body").text(); ul.append('<li>' + JanEntryBody + '</li>'); 

    $(this).find("Comment").each(function() { 
    var CommentId  = $(this).find("cid").text(); ul.append('<li>' + CommentId + '</li>'); 
    var CommentDate = $(this).find("cdate").text(); ul.append('<li>' + CommentDate + '</li>'); 
    var CommentTime = $(this).find("ctime").text(); ul.append('<li>' + CommentTime + '</li>'); 
    var CommentFrom = $(this).find("cfrom").text(); ul.append('<li>' + CommentFrom + '</li>'); 
    var CommentBody = $(this).find("cbody").text(); ul.append('<li>' + CommentBody + '</li>'); 
    }); 

}); 

    // PARSE 2012 FEBRUARY NODES. 

       var ul = $('<ul/>').fadeIn(1000).appendTo('#GetArchive'); 

     var JanEntries = $(data).find('GetArchive Y2012 Feb Entry').each(function(){ 

    var FebEntryId = $(this).find("id").text(); ul.append('<li>' + FebEntryId + '</li>'); 
    var FebEntryDate = $(this).find("date").text(); ul.append('<li>' + FebEntryDate + '</li>'); 
    var FebEntryTime = $(this).find("time").text(); ul.append('<li>' + FebEntryTime + '</li>'); 
    var FebEntrytitle = $(this).find("title").text(); ul.append('<li>' + FebEntrytitle + '</li>'); 
    var FebEntryBody = $(this).find("body").text(); ul.append('<li>' + FebEntryBody + '</li>'); 

    $(this).find("Comment").each(function() { 
    var CommentId  = $(this).find("cid").text(); ul.append('<li>' + CommentId + '</li>'); 
    var CommentDate = $(this).find("cdate").text(); ul.append('<li>' + CommentDate + '</li>'); 
    var CommentTime = $(this).find("ctime").text(); ul.append('<li>' + CommentTime + '</li>'); 
    var CommentFrom = $(this).find("cfrom").text(); ul.append('<li>' + CommentFrom + '</li>'); 
    var CommentBody = $(this).find("cbody").text(); ul.append('<li>' + CommentBody + '</li>'); 
    }); 

}); 

    // PARSE 2011 JANUARY NODES. 

       var ul = $('<ul/>').fadeIn(1000).appendTo('#GetArchive'); 

     var JanEntries = $(data).find('GetArchive Y2011 Jan Entry').each(function(){ 

    var JanEntryId = $(this).find("id").text(); ul.append('<li>' + JanEntryId + '</li>'); 
    var JanEntryDate = $(this).find("date").text(); ul.append('<li>' + JanEntryDate + '</li>'); 
    var JanEntryTime = $(this).find("time").text(); ul.append('<li>' + JanEntryTime + '</li>'); 
    var JanEntrytitle = $(this).find("title").text(); ul.append('<li>' + JanEntrytitle + '</li>'); 
    var JanEntryBody = $(this).find("body").text(); ul.append('<li>' + JanEntryBody + '</li>'); 

    $(this).find("Comment").each(function() { 
    var CommentId  = $(this).find("cid").text(); ul.append('<li>' + CommentId + '</li>'); 
    var CommentDate = $(this).find("cdate").text(); ul.append('<li>' + CommentDate + '</li>'); 
    var CommentTime = $(this).find("ctime").text(); ul.append('<li>' + CommentTime + '</li>'); 
    var CommentFrom = $(this).find("cfrom").text(); ul.append('<li>' + CommentFrom + '</li>'); 
    var CommentBody = $(this).find("cbody").text(); ul.append('<li>' + CommentBody + '</li>'); 
    }); 

}); 

    // PARSE 2011 FEBRUARY NODES. 

       var ul = $('<ul/>').fadeIn(1000).appendTo('#GetArchive'); 

     var JanEntries = $(data).find('GetArchive Y2011 Feb Entry').each(function(){ 

    var FebEntryId = $(this).find("id").text(); ul.append('<li>' + FebEntryId + '</li>'); 
    var FebEntryDate = $(this).find("date").text(); ul.append('<li>' + FebEntryDate + '</li>'); 
    var FebEntryTime = $(this).find("time").text(); ul.append('<li>' + FebEntryTime + '</li>'); 
    var FebEntrytitle = $(this).find("title").text(); ul.append('<li>' + FebEntrytitle + '</li>'); 
    var FebEntryBody = $(this).find("body").text(); ul.append('<li>' + FebEntryBody + '</li>'); 

    $(this).find("Comment").each(function() { 
    var CommentId  = $(this).find("cid").text(); ul.append('<li>' + CommentId + '</li>'); 
    var CommentDate = $(this).find("cdate").text(); ul.append('<li>' + CommentDate + '</li>'); 
    var CommentTime = $(this).find("ctime").text(); ul.append('<li>' + CommentTime + '</li>'); 
    var CommentFrom = $(this).find("cfrom").text(); ul.append('<li>' + CommentFrom + '</li>'); 
    var CommentBody = $(this).find("cbody").text(); ul.append('<li>' + CommentBody + '</li>'); 
    }); 

});  

}, 'xml'); 

次に、解析するXMLファイルを示します。

<?xml version="1.0" encoding="utf-8"?> 
<GetArchive> 
    <Y2012> 
    <Jan> 
     <Entry> 
     <id>&lt;b&gt;Jan Entry ID 1&lt;/b&gt;</id> 
     <date>entry date</date> 
     <time>entry time</time> 
     <title>entry title</title> 
     <body>entry &lt;b&gt;body&lt;/b&gt;! html friendly</body> 
     <Comments> 
      <Comment> 
      <cid>Jan Comment ID 1</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
      <Comment> 
      <cid>Jan Comment ID 2</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
     </Comments> 
     </Entry> 
     <Entry> 
     <id>&lt;b&gt;Jan Entry ID 2&lt;/b&gt;</id> 
     <date>entry date</date> 
     <time>entry time</time> 
     <title>entry title</title> 
     <body>entry &lt;b&gt;body&lt;/b&gt;! html friendly</body> 
     <Comments> 
      <Comment> 
      <cid>Jan Comment ID 3</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
      <Comment> 
      <cid>Jan Comment ID 4</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
     </Comments> 
     </Entry> 
    </Jan> 
    <Feb> 
     <Entry> 
     <id>&lt;b&gt;Feb Entry ID 1&lt;/b&gt;</id> 
     <date>entry date</date> 
     <time>entry time</time> 
     <title>entry title</title> 
     <body>entry &lt;b&gt;body&lt;/b&gt;! html friendly</body> 
     <Comments> 
      <Comment> 
      <cid>Feb Comment ID 1</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
      <Comment> 
      <cid>Feb Comment ID 2</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
     </Comments> 
     </Entry> 
     <Entry> 
     <id>&lt;b&gt;Feb Entry ID 2&lt;/b&gt;</id> 
     <date>entry date</date> 
     <time>entry time</time> 
     <title>entry title</title> 
     <body>entry &lt;b&gt;body&lt;/b&gt;! html friendly</body> 
     <Comments> 
      <Comment> 
      <cid>Feb Comment ID 3</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
      <Comment> 
      <cid>Feb Comment ID 4</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
     </Comments> 
     </Entry> 
    </Feb> 
    </Y2012> 
    <Y2011> 
    <Jan> 
     <Entry> 
     <id>&lt;b&gt;Jan Entry ID 1&lt;/b&gt;</id> 
     <date>entry date</date> 
     <time>entry time</time> 
     <title>entry title</title> 
     <body>entry &lt;b&gt;body&lt;/b&gt;! html friendly</body> 
     <Comments> 
      <Comment> 
      <cid>Jan Comment ID 1</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
      <Comment> 
      <cid>Jan Comment ID 2</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
     </Comments> 
     </Entry> 
     <Entry> 
     <id>&lt;b&gt;Jan Entry ID 2&lt;/b&gt;</id> 
     <date>entry date</date> 
     <time>entry time</time> 
     <title>entry title</title> 
     <body>entry &lt;b&gt;body&lt;/b&gt;! html friendly</body> 
     <Comments> 
      <Comment> 
      <cid>Jan Comment ID 3</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
      <Comment> 
      <cid>Jan Comment ID 4</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
     </Comments> 
     </Entry> 
    </Jan> 
    <Feb> 
     <Entry> 
     <id>&lt;b&gt;Feb Entry ID 1&lt;/b&gt;</id> 
     <date>entry date</date> 
     <time>entry time</time> 
     <title>entry title</title> 
     <body>entry &lt;b&gt;body&lt;/b&gt;! html friendly</body> 
     <Comments> 
      <Comment> 
      <cid>Feb Comment ID 1</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
      <Comment> 
      <cid>Feb Comment ID 2</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
     </Comments> 
     </Entry> 
     <Entry> 
     <id>&lt;b&gt;Feb Entry ID 2&lt;/b&gt;</id> 
     <date>entry date</date> 
     <time>entry time</time> 
     <title>entry title</title> 
     <body>entry &lt;b&gt;body&lt;/b&gt;! html friendly</body> 
     <Comments> 
      <Comment> 
      <cid>Feb Comment ID 3</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
      <Comment> 
      <cid>Feb Comment ID 4</cid> 
      <cdate>comment date</cdate> 
      <ctime>comment time</ctime> 
      <cfrom>comment from</cfrom> 
      <cbody>comment body! text only</cbody> 
      </Comment> 
     </Comments> 
     </Entry> 
    </Feb> 
    </Y2011> 
</GetArchive> 

答えて

2

可能であれば、XMLドキュメントを再構築することをお勧めします。 <Y2012><Year num="2012">となり、<Jan><Month abbr="Jan" num="1">のようになります。これはより一貫しているだけでなく、プログラムでループする方が簡単です。

$(data).find('Year').each(function() { 
    $(this).find('Month').each(function() { 
     $(this).find('Entry').each(function() { 
      // append id, date, time, title, body 
      $(this).find('Comment').each(function() { 
       // append comment id, date, time, from, body 
      }); 
     }); 
    }); 
}); 
+0

はい!あなたは天才です! – ASPiRE

+0

@Vini 1月の数字1を選択するのは人間よりも、JavaScriptのgetMonth()(https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Date)です。/getMonth)は実際にゼロから数え始めます。これは、JSを使用してXMLフィードで現在の月/年を検索する場合にのみ重要です。 – Blazemonger

関連する問題