ユーザーがクエリを送信してから、このクエリを処理して結果をXMLで返すサーブレットを使用するフォームがあります。この結果、Ajaxを介して動的にテーブルにデータを入力しようとしているため、以下のコードを使用します。
var thead = $("<thead>");
var rowsTHead = $("<tr>");
var tbody = $("<tbody>");
var numberOfColumns;
$(xml).find("head").each(function(){
var variable = $(this).find("variable");
numberOfColumns = variable.length;
for (var i = 0; i < variable.length; i++){
var name = $(variable[i]).attr("name");
rowsTHead.append($("<th>").html(name));
}
});
thead.append(rowsTHead);
$(xml).find("result").each(function(){
var literal = $(this).find("literal");
var rowsTBody = $("<tr class=\"even\">");
literal.length = numberOfColumns;
for (var j = 0; j < literal.length; j++){
var tdBody = $("<td>");
tdBody.html($(literal[j]).text());
rowsTBody.append(tdBody);
}
tbody.append(rowsTBody);
});
$(".tablesorter").empty()
.append(thead)
.append(tbody);
このコードは、UNIONクエリで使用されるまで完全に機能します。UNIONを使用する場合、返されるxmlは次のようになりますhttp://pastebin.com/y7hXK1Zy
観察できるように、このクエリには、gn1、indication1、gn2、indication2の4つの変数があります。何が問題になっているのかというと、すべての変数の値がgn1とindication1に対応する列に書き込まれているということです。
各変数の値を対応する列に書き込むことを望みました。これを可能にするために、コードを何に変更すればよいのでしょうか。