jQueryでxmlを読み込んで、五十音順にソート

このQ&Aのポイント
  • jQueryを使用してXMLデータを読み込み、五十音順にソートする方法を教えてください。
  • 以下のようなXMLデータをjQueryを使って読み込み、五十音順にソートする方法を教えてください。
  • 最終的には、以下のような形式で書き出したいと考えています。ご教授願います。
回答を見る
  • ベストアンサー

jQueryでxmlを読み込んで、五十音順にソート

jQueryでxmlを読み込んで、五十音順にソート qa6111214でjQueryでXMLを操作する方法について質問させていただいた者です。 たびたび申し訳有りません。質問させていただきます。 jQueryでxmlで読み込んで、五十音順にソートしたいのですが方法がわかりません。 ---------------------------------------------------------------------------------------------------- <data> <item> <link>hoge1.html</link> <name>山田 太郎</name> <syllabary>やまだたろう</syllabary> </item> <item> <link>hoge2.html</link> <name>山田 花子</name> <syllabary>やまだはなこ</syllabary> </item> <item> <link>hoge3.html</link> <name>田中 太郎</name> <syllabary>たなかたろう</syllabary> </item> <item> <link>hoge4.html</link> <name>田中 花子</name> <syllabary>たなかはなこ</syllabary> </item> <item> <link>hoge5.html</link> <name>鈴木 太郎</name> <syllabary>すずきたろう</syllabary> </item> <item> <link>hoge6.html</link> <name>鈴木 花子</name> <syllabary>すずきはなこ</syllabary> </item> </data> ------------------------------------------------------------------------------------------------ というxmlデータをjQueryで読み込んで、五十音順にソートして表示する方法を探しています。 例えば…… ------------------------------------------------------------------------------------------------ <a href="hoge5.html">鈴木 太郎</a> <a href="hoge6.html">鈴木 花子</a> <a href="hoge3.html">田中 太郎</a> <a href="hoge4.html">田中 花子</a> <a href="hoge1.html">山田 太郎</a> <a href="hoge2.html">山田 花子</a> ------------------------------------------------------------------------------------------------ といった具合に書き出したいのですが…… ご教授願います。また、参考になりそうな書籍/サイトはありますでしょうか。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.1

もっとスマートな書き方もありそうですが、 jQueryで取り出したデータを,でつないだ配列にして、 ソートしてから再びsplitでデータをバラバラにして、 入れ込んでみました。 $(function(){ var myArray = new Array(); $.ajax({ url: "data.xml", dataType: 'xml', cache: false, timeout: 1000, error: function(){ alert("xmlファイルの読み込みに失敗しました"); }, success: function (data){ $(data).find("item").each(function(i){ myArray[i] = $(this).find("syllabary").text() + ',' + $(this).find("name").text() + ',' + $(this).find("link").text(); }); myArray = myArray.sort(); $(myArray).each(function(i){ var myData = myArray[i].split(","); $("ul.column").append('<li><a href="'+myData[2]+'">'+myData[1]+'('+myData[0]+')</a></li>'); }); } }); $("li.noJavaScript").remove(); });

lalalanlanlala
質問者

お礼

わかりやすい解説ありがとうございます。 配列の使い方が少しわかりました。 やっぱり、付け焼き刃のjavaScriptじゃ、なかなか難しいんだな。。。と思いました。 jQueryはcssっぽい書き方なので、どうにかなるんじゃなかろかと思っていましたが、 javaScriptからきちんと勉強しなければと再認識いたしました。 ありがとうございます。

関連するQ&A

  • jQueryでXMLを操作

    jQueryでXMLを操作 最近jQueryを勉強しはじめました。 jQueryでXMLを読み込んで、item val="new"を含んだデータのみ<ul></ul>内に表示したいのですが うまくいきません。 ご教授願います。 また、こういったjQueryの使い方に関する、お勧めの本やページ等ございましたら 教えてください。宜しくお願い致します。 -------------------------XML Data------------------------- <data> <item val="new"> <link>01.html</link> <name>ほげ田 ほげ太</name > <photo>dummy.jpg</photo> </item> <item val="new"> <link>02.html</link> <name>ほげ田 ほげ子</name > <photo>dummy.jpg</photo> </item> <item val="new"> <link>03.html</link> <name>ほげ山 ほげ太</name > <photo>dummy.jpg</photo> </item> <item> <link>04.html</link> <name>ほげ山 ほげ子</name > <photo>dummy.jpg</photo> </item> </data> -------------------------JavaScript------------------------- $(function(){ $.ajax({ url: 'doctors/data.xml', dataType: 'xml', timeout: 1000, error: function(){ alert("xmlファイルの読み込みに失敗しました"); }, success : function(data){ $("item",data).each(function(){ if($("item",this).attr("val") == "new"){ $(".column").append('<li><a href="'+$("link",this).text()+'"><img src="image/'+$("photo",this).text()+'" alt="'+$("name",this).text()+'" title="'+$("name",this).text()+'"></a></li>'); } }) } }) $("li.noJavaScript").remove(); }) -------------------------HTML------------------------- <div id="wrapper"> <ul class="column"> <li class="noJavaScript">javaScriptを有効にしてください。</li> </ul> </div>

  • replaceを使って更に重複レコード削除するには?

    下記のように空白除去、ソート、重複行削除を行いたいのですが、 なかなかうまくいきません。どなたか力を貸して下さい。 ----------------- name    | laptime ----------------- 山田太郎  | 50 鈴木 花子 | 20 山田 太郎  | 10 齊藤 二郎 | 60 山田 太郎  | 30 ------------------ ↓ ----------------- name    | laptime ----------------- 山田太郎  | 10 鈴木花子 | 20 齊藤二郎 | 60 ------------------ * laptime が小さい順 * nameの空白除去 * 空白除去後のnameの重複行削除(laptimeが一番小さいものを残す) 下記のようにSQL文を作って発行してみたのですが、 SELECT DISTINCT replace( replace( trim( name ) , ' ', '' ) , ' ', '' ) AS name_a, laptime FROM tyouhuku ORDER BY laptime ASC ----------------- name_a  | laptime ----------------- 山田太郎 | 10 鈴木花子 | 20 山田太郎 | 30 山田太郎 | 50 齊藤二郎 | 60 ------------------ と、空白削除とlaptimeソートまで出来てるのですが、重複行削除ができませんでした。 どなたかご助言、宜しくお願いします!

    • ベストアンサー
    • MySQL
  • JQueryでxmlのデータを取得する。

    以下のようになっているxmlのデータがあります。 --------------------- <item> <name1>0</name1> <name2>1</name2> <name3>0</name3> </item> --------------------- <item>~</item>の中の 子ノードのタグ名とテキストデータをJQueryを使って取得したいと考えています。 上記のように、<name1><name2><name3> とタグ名がバラバラなので 配列で取得したいのですが。やり方がわかりません。 どなたかご教授ください。

    • ベストアンサー
    • AJAX
  • XML::DOM / XML::XPathでソート

    XML::DOMで効率的なソートの方法はどんなものがありますでしょうか。 一応動くものは作れたのですが、効率的とは言い難く、しかも ソート項目が一意のデータでないといけないという欠点があります。 ############################################### use XML::DOM::XPath; my $xml = <<EOM; <?xml version="1.0" encoding="UTF-8" ?> <list> <item id="10">Apple</item> <item id="5">Orange</item> <item id="20">Melon</item> </list> EOM my $parser = XML::DOM::Parser->new(); my $doc = $parser->parse( $xml ); ## <item>タグの一覧を作成 my @list = $doc->findnodes('/list/item'); ## <item>タグ id属性一覧を作成 my @idlist = map{ $_->getAttribute("id") } @list; ## id属性順にソート foreach my $id ( sort{ $a<=>$b } @idlist ){ ## id属性値を指定してノードリストを取得 my @item = $doc->findnodes('/list/item[@id='.$id.']'); ## idは一意なのでリストの先頭で固定 print $item[0]->getAttribute('id')."\n"; print $item[0]->getFirstChild->getNodeValue."\n"; } ############################################### ハッシュなら sort{ $hoe{$b} <=> $hoe{$a} } keys %hoe といった方法があるのですが、XML::DOMの場合は同じようにいきません。 良い方法がありましたらお願いします。

    • ベストアンサー
    • Perl
  • XMLのソート(再)

    XMLのソート(再) http://okwave.jp/qa/q6069966.html に足りない部分があったので訂正して再質問します。 このようなXMLがあります <?xml version="1.0" encoding="UTF-8" ?> <ROOT>  <CONTENTS>   (略)  </CONTENTS>  <DATASET>   <DATA1>A</DATA1>   <DATA2>B</DATA2>   (略)   <ITEMS>    <ITEM>     <TITLE>ABC</TITLE>     <NUMBER>10</NUMBER>    </ITEM>    <ITEM>     <TITLE>DEF</TITLE>     <NUMBER>0</NUMBER>    </ITEM>    <ITEM>     <TITLE>GHI</TITLE>     <NUMBER>100</NUMBER>    </ITEM>    <ITEM>     <TITLE>JKL</TITLE>     <NUMBER>50</NUMBER>    </ITEM>   </ITEMS>  </DATASET> </ROOT> これを、/ITEMS/ITEM/NUMBER でソートして <?xml version="1.0" encoding="UTF-8" ?> <ROOT>  <CONTENTS>   (略)  </CONTENTS>  <DATASET>   <DATA1>A</DATA1>   <DATA2>B</DATA2>   (略)   <ITEMS>    <ITEM>     <TITLE>DEF</TITLE>     <NUMBER>0</NUMBER>    </ITEM>    <ITEM>     <TITLE>ABC</TITLE>     <NUMBER>10</NUMBER>    </ITEM>    <ITEM>     <TITLE>JKL</TITLE>     <NUMBER>50</NUMBER>    </ITEM>    <ITEM>     <TITLE>GHI</TITLE>     <NUMBER>100</NUMBER>    </ITEM>   </ITEMS>  </DATASET> </ROOT> というようにしたいです。 XSLなどでできるのでしょうか? <DATA1>…は実際には様々なデータがあり、その中で階層になっているものもあります。 Excel2003のVBAでMSXMLを使っています。

    • ベストアンサー
    • XML
  • 次の条件を満たすSQL文をご教示下さい。

    テーブル名: list no | first_name | last_name | comment ----+------------+-----------+--------- 1 | 太郎 | 山田 | ほげ 2 | 次郎 | 田中 | ふが 3 | 花子 | 山田 | ぴよ 4 | 三郎 | 佐藤 | ぴよ 5 | 太郎 | 山田 | ぴよ 6 | 次郎 | 田中 | ふー 7 | 三郎 | 佐藤 | ふー 8 | 花子 | 山田 | ふー 上記の表から同じ”last_name”を持つ人の”first_name”と”last_name”を重複無しで抽出する(下記のような結果)SQL文は作成可能でしょうか。 結果 first_name | last_name ------------+----------- 太郎 | 山田 花子 | 山田 宜しくお願いします。

  • バラバラになっている名前をきれいに並べたい

    エクセルで表を作成しています。 山田太郎  東京 鈴木花子  神奈川 佐藤一太郎 千葉 山田太郎  東京 山田太郎  東京 鈴木花子  神奈川 佐藤一太郎 千葉 ↓ 山田太郎  東京 山田太郎  東京 山田太郎  東京 鈴木花子  神奈川 鈴木花子  神奈川 佐藤一太郎 千葉 佐藤一太郎 千葉 のようにきれいに並べる方法はないでしょうか? よろしくおねがいします。

  • jQueryでxmlの異なるタグ要素を取得したい。

    jQueryを最近勉強したての者です。 詳しい方、どうか教えて下さい。 HTMLにxmlのデータを読み込ませようとしています。 概略をお話しすると、 htmlファイルによって、xmlの別々の要素を取得したいのです。 やりたいメソッドは同じです。 別々の要素の中のデータによって、imgの表示/非表示を切り替えたいのです。 問題は、対象となるhtmlファイルが複数あり そのhtmlファイルによって、参照するxmlのタグが異なる事なんです。 xmlは、以下のように<shopdata>をルートノードとし、以下のような感じです。 --------------------- <?xml version="1.0" encoding="utf-8"?> <shopdata> <item> <name1>0</name1> <name2>1</name2> <name3>0</name3> </item> </shopdata> --------------------- <name*>~</name*> の中のデータは、0もしくは1なのですが 0の時はimgを表示 1の時はimgを非表示させようと考えています。 ただ<name1><name2><name3> とタグ名がバラバラなんです。 ※おしりの数字が違うだけで、規則的ではあります。 ちなみにhtmlは複数あって  a.htmlの時は→xmlの<name1>を参照  b.htmlの時は→xmlの<name2>を参照  c.htmlの時は→xmlの<name3>を参照 という感じです。 ※htmlファイル名は特に規則的ではなく、いろいろなファイル名がついています。。。 最初、考えたのは、 htmlのどこかに、id="1"と入れて、idが1の時は、<name1>の要素を取得し、 htmlのどこかに、id="2"と入れて、idが2の時は、<name2>の要素を取得し… っていうことを考えたのですが、それもどのように書いたら良いのかが分からないんです。 そもそも、そういった事は可能なのでしょうか? ちなみのhtmlのbodyタグ自体がテンプレートでできているので、 idをどこかにふるとしたら、head内とかになるのしょうか? それぞれ、ボタンの表示は、 if文を使って、show(),hide()メソッドを使うとは思うのですが… 詳しくコードを教えていただけたら、助かります。 どうか、宜しくお願いいたします。

    • ベストアンサー
    • AJAX
  • Excelの作業で困っています。

    エクセルで、データをコード管理しているのですが、下記(山田太郎と田中花子)のように、同じ人でコード(C1)を2つ所有している場合があるので、重複しているのデータを探し出し、そのデータを削除する作業をしているのですが、5000件以上のデータがあるものですから、相当時間がかかってしまいます。何か関数とか使って処理する方法がないか教えてください。ちなみに今は、データの並び替えをして1件ずつ削除しています。     C1    C2       C3 R1  100  山田 太郎  ヤマダ タロウ R2  200  田中 花子  タナカ ハナコ R3  105  山田 太郎  ヤマダ タロウ R4  300  鈴木 次郎  スズキ ジロウ R5  250  田中 花子  タナカ ハナコ  

  • エクセルで同じ日に2回出勤したデータ数を数えたい

    同じ人が同じ日に2回出勤しているデータ数を知りたいです。 2 山田太郎 1/21 10:00 13:00 2 山田太郎 1/21 18:00 24:00 1 山田太郎 1/22 10:00 17:00 1 山田太郎 1/23 14:00 22:00 1 鈴木花子 1/21 10:00 17:00 1 鈴木花子 1/23 17:00 24:00 2 鈴木花子 1/24 10:00 15:00 2 鈴木花子 1/24 18:00 24:00 ↑のようなタイムカードがあります。 上の例だと、2もしくは4という数値がほしいです。 今までは図のようにA列に countifs関数を記入し、同一人物が同一日付に2回出勤 しているかをチェック、その数を数えていました。 今後は、 同一人物が同一日付に2回出勤している件数を1つの関数で知りたいと考えています。 ↑の例だと、4件 という数を1つの関数で出したいです。 どのようにすればよいのかアドバイスをお願いいたします。

専門家に質問してみよう