この質問はCGIで投稿したのですがこちらの方が適切ですかね?
XML形式のクエリーを送信させてそれをPERLで解析したいのですがうまくいきません。

<LOGIN USERNAME="hanako" PASSWORD="875" />

上記形式のXML(将来的には情報を付加)なんですがFLASHから生成させています。
環境変数など調べてみたのですがメソッドはPOST,CONTENT_LENGTHもしっかり入っています。
どこに送られてきたデータがあるのでしょうか、またXMLを解析するモジュールでもあるのでしょうか(XML::DOM,PARSER?使用方法が乏しいです)、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

もう問題は解決していますか?


一応参考URL載せておきます。

参考URL:http://member.nifty.ne.jp/hippo2000/perltips/ind …
    • good
    • 0
この回答へのお礼

返事が遅れまして申し訳ございませんでしたm(_ _)m
さっそく参考URLにアクセスしてみます。
回答ありがとうございました o(^o^)o

お礼日時:2001/08/20 09:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QXML::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の場合は同じようにいきません。

良い方法がありましたらお願いします。

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 $do...続きを読む

Aベストアンサー

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');

foreach my $node ( sort { $a->getAttribute('id') <=> $b->getAttribute('id') } @list){
print $node->getAttribute('id')."\n";
print $node->getFirstChild->getNodeValue."\n";
}

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');

foreach my $node ( sort { $a->getAttribute('id') <=> $b->getAttribute('id') } @list){
print $node->getAttribute('id')."\n";
print $node-...続きを読む

QPerlでXMLを解析して出力する。

PerlでXMLで必要なデータだけ抽出しようと考えています。
下のサンプルXMLを次のテキストに変換したいのですが
具体的な記述方法が知りたく質問しました。

さくら
 子供1
 子供2
きく
 子供3

正規表現でなくXMLパーサ?というもので解決したいです。「宿題ではありません、あしからず(^^;」


<?xml version="1.0">
<E1>
<E2>
<list>example1></list>
<list>example2></list>
...
</E2>
<E3>
<class name="さくら">
<heya>
<hito>
<seimei>子供1</seimei>
</hito>
<hito>
<seimei>子供2</seimei>
</hito>
</heya>
</class>

<class name="きく">
<heya>
<hito>
<seimei>子供3</seimei>
</hito>
</heya>
</class>

</E3>
</E2>
</E1>

PerlでXMLで必要なデータだけ抽出しようと考えています。
下のサンプルXMLを次のテキストに変換したいのですが
具体的な記述方法が知りたく質問しました。

さくら
 子供1
 子供2
きく
 子供3

正規表現でなくXMLパーサ?というもので解決したいです。「宿題ではありません、あしからず(^^;」


<?xml version="1.0">
<E1>
<E2>
<list>example1></list>
<list>example2></list>
...
</E2>
<E3>
<class name="さくら">
<heya>
<hito>
<seimei>子供1</seime...続きを読む

Aベストアンサー

XML::Simple モジュールを使った方法。
<?xml version="1.0">
は、
<?xml version="1.0" ?>
で文字コードは UTF-8
example1>
は、
example1
----------------------------------------------------------------
use encoding 'UTF-8', STDOUT => "shiftjis";
use XML::Simple;

my $xml;
{
local $/ = undef;
open(FILE, "<:encoding(UTF-8)", "data.xml");
$xml=<FILE>;
close(FILE);
}
my $tree = XMLin($xml, ForceArray => 1);

while(my ($name, $class) = each(%{$tree->{E3}[0]->{class}})) {
print $name . "\n";
for my $hito (@{$class->{heya}[0]->{hito}}){
print " ".$hito->{seimei}[0] ."\n";
}
}

XML::Simple モジュールを使った方法。
<?xml version="1.0">
は、
<?xml version="1.0" ?>
で文字コードは UTF-8
example1>
は、
example1
----------------------------------------------------------------
use encoding 'UTF-8', STDOUT => "shiftjis";
use XML::Simple;

my $xml;
{
local $/ = undef;
open(FILE, "<:encoding(UTF-8)", "data.xml");
$xml=<FILE>;
close(FILE);
}
my $tree = XMLin($xml, ForceArray => 1);

while(my ($name, $class) = each(%{$tree->{E3}[0]->{cla...続きを読む

Qperl xml解析について

perl初心者です。
以下のxmlデータの「http://www.google.co.jp」をxml解析して値を取得したいのですが、
どのようなプログラムを記述すればよろしいのでしょうか?

<?xml version="1.0" encoding="x-sjis-cp932" ?>
<Res_result>
<result result="1" />
<result redirect="http://www.google.co.jp" />
</Res_result>

いろいろ試してみましたが、どうもうまくいきません。

ちなみにサーバーにインストールされているxml関連のモジュールが
XML::Simple
XML::Parser
となります。

ご教授の方、宜しくお願い致します。

Aベストアンサー

一応、下記のコードで取り出すことができます。

# モジュールを読み込む
use XML::Simple;

# 一旦、XMLを $xml に読み込む
my $xml_file = 'result.xml';
open my($fh), '<', $xml_file;
my $xml = join('',<$fh>);

# x-sjis-cp932 があると解析に失敗するので、
# <?xml version="1.0" encoding="x-sjis-cp932" ?> を削除
# XML を UTF-8 で書くと下記の処理はいらない。
$xml =~ s/<\?.*\?>//;

# XML::Simple を使い、$ref にリファレンスのツリーとして解析する
my $x = XML::Simple->new(); # パーサを作成
my $ref = $x->XMLin($xml);

# 必要なデータを出力
print $ref->{result}->[1]->{redirect};

XML::Simple はこの例のように単純な構造のXMLを Perl 的な変数のツリーに変換するモジュールです。
少なくとも Perl のリファレンスをある程度理解していないと何をしているかわからないと思います。

最後の行の「$ref->{result}->[1]->{redirect}」が何を意味しているのか分からないようでしたら、まずリファレンスを学習し、XML::Simple の説明を読むとよいと思います(参照URL)。

参考URL:http://d.hatena.ne.jp/perlcodesample/20100424/1270894115

一応、下記のコードで取り出すことができます。

# モジュールを読み込む
use XML::Simple;

# 一旦、XMLを $xml に読み込む
my $xml_file = 'result.xml';
open my($fh), '<', $xml_file;
my $xml = join('',<$fh>);

# x-sjis-cp932 があると解析に失敗するので、
# <?xml version="1.0" encoding="x-sjis-cp932" ?> を削除
# XML を UTF-8 で書くと下記の処理はいらない。
$xml =~ s/<\?.*\?>//;

# XML::Simple を使い、$ref にリファレンスのツリーとして解析する
my $x = XML::Simple->new(); # パーサを作...続きを読む

QJSON形式のデータ解析が出来なくて悩んでます。

「Twitterから学ぶ,Web APIのキホン」(http://gihyo.jp/dev/serial/01/perl-hackers-hub/000403)のサンプルプログラムを参考にitunesの検索apiの検索結果を解析しようとしているのですが解析できなく、何も表示されない状態になります。
itunes 検索api
http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html

まずは上のSearch Examplesにいくつか示しているitunes apiの検索結果(jsonデータ)から"artistId"に対する項目や"artistName"に対する項目を抜き出そうと試みています。
以下は実際に私が実行しているプログラムです。

-----------------------------------------------------------------
print <<"HTML";
Content-type: text/html
<html>
HTML

use LWP::UserAgent;
use URI;
use JSON qw(decode_json);
use Encode qw(encode_utf8);

my $uri =
URI->new('※ここにitunes apiの検索結果のurl入れています');

my $ua = LWP::UserAgent->new;
my $res = $ua->get($uri);
my $json = $res->content;

my $ref = decode_json($json);
for my $applist ( @{ $ref->{results} } ) {
print
encode_utf8("$applist->{artistId}: $applist->{artistName}\n");}
--------------------------------------------------------------------------------------

としているのですが結果は何も表示されません。※cgiはmac 環境にてUTF-8 Mac(CR)で保存しております。
「Twitterから学ぶ,Web APIのキホン」のサンプルプログラムは正常に動いて表示出来ているのでモジュールやPerlのパスには問題ないと思います。
どうすればitunes 検索apiのjsonデータがPerlでちゃんと解析されるのかご教示お願いします。

「Twitterから学ぶ,Web APIのキホン」(http://gihyo.jp/dev/serial/01/perl-hackers-hub/000403)のサンプルプログラムを参考にitunesの検索apiの検索結果を解析しようとしているのですが解析できなく、何も表示されない状態になります。
itunes 検索api
http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html

まずは上のSearch Examplesにいくつか示しているitunes apiの検索結果(jsonデータ)から"artistId"に対する項目や"artistName"に対する項目を...続きを読む

Aベストアンサー

CGI としてブラウザでアクセスするのではなく、コマンドラインで実行するとデータが表示されませんか。

こちらで質問としてあげられたコードをコピペしてコマンドラインで実行すると JSON データはちゃんと表示されています。

CGI としてアクセスするとうまく表示されない理由は、このプログラムで作成される出力が HTML ドキュメントとして正しくないからです。

Content-Type: text/html と <html>との間には空行が必要ですし、なによりブラウザに表示するコンテンツは、<body></body> の間に入っていなければなりません。

HTML ドキュメントの構造について調べなおすことをお勧めします。

Q形態素解析の解析内容を各品詞別にファイルに書き込みたいです。

形態素解析の解析内容を各品詞別にファイルに書き込みたいです。
以下のサイトのフォームに文章を入力すると品詞ごとに分解されます。
http://dai-gokuh.sakura.ne.jp/jikkenn/morph11.html
その品詞をそれぞれの品詞ファイルに書き込みたいと思っています。

例えば、「餃子はおいしい。」と入力すれば、
餃子 は名詞ファイルに、
は は助詞ファイルに、
おいしい は形容詞ファイルに、
○ はその他ファイルに書き込まれます。

また、「ラーメンはおいしい。」などと書き込むと今度はラーメンが新しいワードとしてファイルに登録されます。このようなプログラムを作りたいと思っています。
どなたかよろしくお願いします。
MECAPIについては以下のサイトもご参考ください。
言語はPerlでお願いします。
http://mimitako.net/api/mecapi.cgi

Aベストアンサー

単純なテキストファイルへの出力処理の話しかと思っていたらポイントは別のところにあったんですね。
Socketが使えるかどうかわかりませんがこんな感じでしょうか?
****************************************************************************************************
#!/usr/bin/perl

use Socket;
my $host = "mimitako.net";
my $path = "/api/mecapi.cgi";
my $data = "sentence=ラーメンはおいしい。";

#----------------接続処理-------------------
socket(SOCKET, PF_INET, SOCK_STREAM, 0);
connect(SOCKET, pack_sockaddr_in(80, inet_aton($host)));
select(SOCKET); $|=1; select(STDOUT);
#------------HTTPリクエスト送信-----------------
print SOCKET "POST $path HTTP/1.0\n";
print SOCKET "Host: $host\n";
print SOCKET "Content-Length: ".length($data)."\n\n";
print SOCKET $data;
#------------サーバからのデータを受信 -----------------
my @aDT = <SOCKET>;

print "Content-type: text/plain\n\n";
## 配列@aDT内にあるXMLの内、surfaceとfeatureについて構文を解釈して単純な処理を行う
print @aDT;

exit;

****************************************************************************************************
もう少し別のやり方があると思いますが、ぱっと思いついたのがこれでした。

ただし岡崎市中央図書館不正?アクセス事件のような事例もあるのでMECABは自分のサーバに立てるか他人のサーバなら許可を取ってやりましょう。

また、テキストファイル出力を行う際にダブりチェックはデータ量に比例して負荷が高くなると思います。量が少ないなら良いのですが、そうでないならDBサーバを利用した方が良いと思います。

でも、一つ目のリンク先でJavaScriptで処理できてるのならそこからデータを処理できるCGIを作ってサブミットした方が早いかと思います。

単純なテキストファイルへの出力処理の話しかと思っていたらポイントは別のところにあったんですね。
Socketが使えるかどうかわかりませんがこんな感じでしょうか?
****************************************************************************************************
#!/usr/bin/perl

use Socket;
my $host = "mimitako.net";
my $path = "/api/mecapi.cgi";
my $data = "sentence=ラーメンはおいしい。";

#----------------接続処理-------------------
socket(SOCKET, PF_INET, SOCK_STREAM, 0);
conne...続きを読む


おすすめ情報