3

こんにちは現在、ウェブページから自分のフォルダに保存されている場合、xmlファイルを解析できます。

use strict;
use warnings;
use Data::Dumper;
use XML::Simple;

my $parser = new XML::Simple;
my $data = $parser->XMLin("config.xml");
print Dumper($data);

しかし、私がウェブサイトからそれを解析しようとすると、それは機能しません。

use strict;
use warnings;
use Data::Dumper;
use XML::Simple;

my $parser = new XML::Simple;
my $data = $parser->XMLin("http://website/computers/computers_main/config.xml");
print Dumper($data);

「ファイルが存在しません:http://website/computers/computers_main/config.xml attest.pl12行目」というエラーが表示されます。

Webページから複数のxmlファイルを解析するにはどうすればよいですか?Webサイトから複数のxmlを取得して、解析する必要があります。誰かがこれを手伝ってくれませんか?

4

3 に答える 3

3

のドキュメントをお読みくださいXML::SimpleXMLinこのメソッドは、ファイルハンドル、文字列、さらにはIO::Handleオブジェクトを取得できることに注意してください。取得できないのはHTTP経由のURLです。

PerlモジュールLWP::Simpleを使用して、必要なXMLファイルをフェッチし、それをに渡しますXMLin

以前のように、LWP::Simpleを使用してダウンロードしてインストールする必要があります。cpanXML::Simple

于 2012-05-08T02:46:16.823 に答える
2

スーパーエディット:この方法ではWWW :: Mechanizeが必要ですが、Webサイトにログインしてxmlページを取得できます。コメントにあるいくつかのことを変更する必要があります。お役に立てれば。

use strict;
use warnings;
use Data::Dumper;
use XML::Simple;
use WWW::Mechanize;

# Create a new instance of Mechanize
$bot = WWW::Mechanize->new();
# Create a cookie jar for the login credentials
$bot->cookie_jar(
        HTTP::Cookies->new(
            file           => "cookies.txt",
            autosave       => 1,
            ignore_discard => 1,
    )
);
# Connect to the login page
$response = $bot->get( 'http://www.thePageYouLoginTo.com' );
# Get the login form
$bot->form_number(1);
# Enter the login credentials.
# You're going to have to change the login and 
# pass(on the left) to match with the name of the form you're logging
# into(Found in the source of the website). Then you can put your 
# respective credentials on the right.
$bot->field( login => 'thisIsWhereYourLoginInfoGoes' );
$bot->field( pass => 'thisIsWhereYourPasswordInfoGoes' );
$response =$bot->click();
# Get the xml page
$response = $bot->get( 'http://website/computers/computers_main/config.xml' );
my $content = $response->decoded_content();
my $parser = new XML::Simple;
my $data = $parser->XMLin($content);
print Dumper($data);

これを試してみてください。上記の回答のようにLWP::Simpleを使用します。ページに接続してそのページのコンテンツ(xmlファイル)を取得し、XMLinを介して実行します。 編集: get$url行に簡単なエラーチェックを追加しました。 Edit2:ログインが不要な場合に機能するはずなので、ここにコードを保持します。

use strict;
use warnings;
use Data::Dumper;
use XML::Simple;
use LWP::Simple;

my $parser = new XML::Simple;

my $url = 'http://website/computers/computers_main/config.xml';
my $content = get $url or die "Unable to get $url\n";
my $data = $parser->XMLin($content);

print Dumper($data);
于 2012-05-08T05:03:27.453 に答える
1

XML :: Simpleに固執する特別な理由がない場合は、XML :: Twig、XML :: LibXMLなどの他のパーサーを使用してください。これは、Webで利用可能なXMLを解析するための組み込み機能を提供します。

XML::Twigを使用した同じものの簡単なコードを次に示します。

use strict;
use warnings;
use XML::Twig;
use LWP::Simple;

my $url = 'http://website/computers/computers_main/config.xml';
my $twig= XML::Twig->new();
$twig->parse( LWP::Simple::get( $url ));

前述のように、XML::Simpleにはそのような組み込み機能はありません。

于 2012-05-08T05:15:49.120 に答える