XMLから組み合わせ情報を取得する方法

このQ&Aのポイント
  • Perlを使い始めたばかりの方に、XMLデータから組み合わせ情報を取得する方法をご紹介します。
  • 具体的な例として、以下のようなXMLがある場合に、AとBを選んだらキーワードの組み合わせを表示する方法を解説します。
  • 組み合わせ情報を取得するためには、Perlのプログラムを使用し、XMLデータの解析と組み合わせの生成を行います。
回答を見る
  • ベストアンサー

xmlから組み合わせ情報を得たい

最近Perlを使い始めたものです。 Perlを用いてxmlデータから、組み合わせの情報を取り出したいと思っています。 どのようにプログラムを書けばできるか教えていただけないでしょうか。 例えば以下のようなxmlがあるとします。 -------------------------- <name>A</name> <keywords> <keyword>a</keyword> <keyword>b</keyword> </keywords> ・ ・ <name>B</name> <keywords> <keyword>c</keyword> <keyword>d</keyword> </keywords> ・ ・ ------------------------------ このとき、AとBを選んだら、以下のようにキーワードの組み合わせを表示するようにしたいです。 a-b a-c a-d b-c b-d c-d

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.1

次のプログラムでは、1度ハッシュに読み込んでから組み合わせを生成しています。 use strict; my (%hash, $name); while (my $line = <DATA>) { $name = $1 if $line =~ /<name>([A-Z])<\/name>/; push @{$hash{$name}}, $1 if $line =~ /<keyword>([a-z])<\/keyword>/ } my @list = (@{$hash{A}}, @{$hash{B}}); foreach my $c1 (0 .. ($#list - 1)) { foreach my $c2 (grep { $_ > $c1 } 1 .. $#list) { print "$list[$c1]-$list[$c2]\n"; } } __DATA__ <name>A</name> <keywords> <keyword>a</keyword> <keyword>b</keyword> </keywords> ・ ・ <name>B</name> <keywords> <keyword>c</keyword> <keyword>d</keyword> </keywords> ・ ・

riyoooh
質問者

お礼

回答ありがとうございます。 うまく動きました!

関連するQ&A

  • Perlを用いて、XMLファイルの中のキーワードの個数を数えるプログラ

    Perlを用いて、XMLファイルの中のキーワードの個数を数えるプログラムを組もうと思っています。 次のようなXMLの中の<keyword>のタグに囲まれた文字列を数えるプログラムです。 <?xml version="1.0" encoding="UTF-8"?> <grant_award_list> <grant_award id="1001"> <title>タイトル1</title> <keywords><keyword>A</keyword><keyword>B</keyword></keywords> </grant_award> <grant_award id="1002"> <title>タイトル2</title> <keywords><keyword>B</keyword></keywords> </grant_award> </grant_award_list> このようなときに、次のようにキーワードとその出現回数が記載されたXMLファイルにしたいと考えています。 <?xml version="1.0" encoding="UTF-8"?> <keywords> <keyword>A</keyword> <count>1</count> </keywords> <keywords> <keyword>B</keyword> <count>2</count> </keywords> 具体的なプログラムのコードを教えてください。よろしくお願いします。

  • Perlを用いて、XMLファイルの中のキーワードの個数を数えるプログラ

    Perlを用いて、XMLファイルの中のキーワードの個数を数えるプログラムを組もうと思っています。 次のようなXMLの中の<keyword>のタグに囲まれた文字列を数えるプログラムです。 <?xml version="1.0" encoding="UTF-8"?> <grant_award_list> <grant_award id="1001"> <title>タイトル1</title> <keywords><keyword>A</keyword><keyword>B</keyword></keywords> </grant_award> <grant_award id="1002"> <title>タイトル2</title> <keywords><keyword>B</keyword></keywords> </grant_award> </grant_award_list> このようなときに、次のようにキーワードとその出現回数が記載されたXMLファイルにしたいと考えています。 <?xml version="1.0" encoding="UTF-8"?> <keywords> <keyword>A</keyword> <count>1</count> </keywords> <keywords> <keyword>B</keyword> <count>2</count> </keywords> 具体的なプログラムのコードを教えてください。よろしくお願いします。

    • ベストアンサー
    • Perl
  • XMLから行列を作成し、テキストに出力しようとしています。

    XMLから行列を作成し、テキストに出力しようとしています。 XMLには複数人がそれぞれ好む色が書かれています。 それをもとに、以下のような行列を作りたいと考えています。 Perlのプログラムのコードを教えてください。よろしくおねがいします。 --------XML------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <person_list> <person id="1001"> <keywords><keyword>赤</keyword><keyword>青</keyword></keywords> </person> <person id="1002"> <keywords><keyword>赤</keyword><keyword>黄</keyword></keywords> </person> <person id="1003"> <keywords><keyword>黄</keyword></keywords> </person> </person_list> ------------------------------------------------------------------ --------テキスト------------- 1001 1002 1003 赤 1 1 0 青 1 0 0 黄 0 1 1 -----------------------------

    • ベストアンサー
    • Perl
  • XMLからXML

    こんにちわ。 以下のやり方がわからなく、困っています。 XSLTを使って以下のようなXML→XMLを行いたいのですが。 変更前: <a> <b> <c>abc</c> <d>def</d> </b> </a> 変更後: <b> <c>abc</c> <d>def</d> </b> ようするに、指定したタグ以下のXML構造をそのまま取り出したいのです。 <xsl:template match="/a"> <xsl:apply-templates select="b"/> </xsl:template> だと中身のabc defしか取れません。 <c>とか<d>は、時によって変わる場合、どのようなXSLT を書けばよいのでしょうか? 申し訳ありませんが、わかる方がいれば教えてください。

    • 締切済み
    • XML
  • 既存のXMLを別のXMLの要素として追加する方法

    JavaでDOMを使用して、既に作成してあるXMLを別のXMLの要素として追加しようと思っているのですが、なかなか上手くいかないので投稿いたしました。 具体的に以下のような既存のXMLファイルがあると仮定して、 <?xml version="1.0" encoding="UTF-8"?> <a> <b>0</b> <c>1</c> <d>2</d> </a> 上記のXMLの親ノード(逆に言えば、このXMLの子ノードとして上記XMLを追加)にあたるXMLは以下のようになっています。 <?xml version="1.0" encoding="UTF-8"?> <A> </A> そして<A>と</A>の間に既存のXMLを追加して、 <?xml version="1.0" encoding="UTF-8"?> <A> <a> <b>0</b> <c>1</c> <d>2</d> </a> </A> のようにしたいと考えています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • XMLとかで出来ますか?

    XMLもXSLもXSLTも何も知らないので出来るのかわかりませんが。 Aに1・2という情報?属性?を付けて Bに2・3を付けて Cに1を付けて 1が付いているのはA・C 2が付いているのはA・B 3が付いているのはB というように表示するにはどうすればいいでしょう?

    • 締切済み
    • XML
  • XML型に対する問い合わせ

    以下のような(1)と(2)のxml型を値を持つレコードがある場合にbの中でcとdが両方1の場合だけ検索((1)のレコードだけが欲しい)するようにはどのように問い合わせればば良いでしょうか? (1) <a>    <b><c>1</c><d>1</d></b>   </a> (2) <a>    <b><c>1</c><d>0</d></b>    <b><c>0</c><d>1</d></b>   </a> 自分で考えた問い合わせだと(1)と(2)の両方のレコードが返ってきてしまいます。 select * from test where   '1'=ANY(xpath('/a/b/c/text()',xml)::text[])   AND '1'=ANY(xpath('/a/b/d/text()',xml)::text[])

  • XMLを動的に読む

    ワードプレスなどで行われているPHP⇔MYSQLのような動きを、javascript⇔XMLでやりたいです。 具体的に言うと、 index.htmlでボタンAを押されるとdata.xmlのA情報がindex.htmlに表示される index.htmlでボタンBを押されるとdata.xmlのB情報がindex.htmlに表示される というものです。 Ajaxなど調べているのですが、なかなかいい情報が見つかりません。 てってきたいのはテキスト情報だけですので、なるべくシンプルで簡単なコードが知りたいのですが、複雑な部分が多くて困っています。 簡単なやり方が紹介されているサイトや簡単なサンプルを見せてもらえるととても助かります。

  • PHPでXMLを扱いたいのですが

    PHPでXMLを扱いたいのですが、わからないところがあります。 <XML>  <T>   <A>    <a>    </a>    <b>    </b>    <c>     <c1></c1>     <c2></c2>    </c>   </A>   <A>    <a>    </a>    <b>    </b>    <c>     <c1></c1>     <c2></c2>    </c>   </A>   <A> 以下くりかし・・・  </T> </XML> このような感じのXMLがある時に、<a>,<b>等のタグの中身はちゃんと一つめの<A>、二つめの<A>、のように、 繰り返しある全てを取り出すことが来るのですが、 <c1>のようにもう一つ奥になっているものが取り出せません。 //以下成功するソースです。 foreach(XML->T->A as $value){ $data[]=$value->a; } for($i=0,$n=count($data);$i<$n;$i++){ $file=$data[$i]; } echo $file; これだとうまく動作しますが、 //以下失敗するソースです。 foreach(XML->T->A->c as $value){ $data[]=$value->c1; } for($i=0,$n=count($data);$i<$n;$i++){ $file=$data[$i]; } echo $file; このように<c1>を取り出そうとすると、繰り返しある<c1>の内の初めの一つしか取りだせません。 もう何回も色々と変えてやっているのですが、どれもうまくいきませんでした。 どうすればいいのでしょうか。分かる方教えて下さい、お願いします。

    • 締切済み
    • PHP
  • C#にてlistView1からXMLファイルへ書込み方法について

    C#にてlistView1からXMLファイルへ書込み方法について 1  2  3  4 5 6 7 8 1 Aさん 50 男 2 Bさん 40 女 3 Cさん 60 男 と書かれていて XMLファイルの中身は、 <?xml version="1.0" encoding="utf-8"?> <Data> <p id="1" name="Aさん" age="50" seibetu="男"></p> </Data> この様なXMLファイルでlistView1にあるデータを全て書込みしたいのですが、どうしたら出来ますか? どなたか申し訳ありませんが、プログラムソース教えて戴けませんか?お願いいたします。

専門家に質問してみよう