1

ツリーでJenkins xml APIを使用しています。これは、ローカルでホストされている Jenkins サーバーに使用している URL です。

http://localhost:8080/api/xml?
   tree=jobs[name,description,color,healthReport[score,description]]

上記の URL は、xml 出力を次のように示しています。

<hudson>
    <job>
        <description/>
        <name>build1</name>
        <color>disabled</color>
        <healthReport>
            <description>Build stability: 2 out of the last 5 builds failed.</description>
            <score>60</score>
        </healthReport>
    </job>
    <job>
        <description>test job description check.</description>
        <name>Build2</name>
        <color>blue</color>
        <healthReport>
            <description>Build stability: No recent builds failed.</description>
            <score>100</score>
        </healthReport>
    </job>
    <job>
        <description/>
        <name>Build3</name>
        <color>blue</color>
        <healthReport>
            <description>Build stability: 3 out of the last 4 builds failed.</description>
            <score>25</score>
        </healthReport>
    </job>
 </hudson>

ここで、さらにタグ値を処理できるように xml 出力を解析したいと思います。

元:

foreach job
if color=blue
print jobname : color 
if score = 100
etc

perlでこれを行うにはどうすればよいですか?どのperlモジュールを使用すればよいですか?

4

3 に答える 3

2

皮切りに:

use XML::LibXML qw( );
my $parser = XML::LibXML->new();
my $doc = $parser->parse_string($xml);
my $root = $doc->documentElement();
  • foreach ジョブ

    for my $job ($root->findnodes('job'))
    
  • 色=青の場合

    my $color = $job->findvalue('color/text()');
    
  • 印刷ジョブ名 : color

    my $job_name = $job->findvalue('name/text()');
    
  • スコア = 100 の場合

    my $score = $job->findvalue('healthReport/score/text()');
    
于 2013-01-25T11:40:53.747 に答える
1

LWP::UserAgent によって Web ドキュメントをフェッチした後に得られるものを次に示します。

XML::LibXML->load: specify location, string, or IO at 12.pl line 23

解析する URL コンテンツを渡していますが、上記のエラーが発生しています。

ここに私のPerlコードがあります:

#!/usr/bin/perl

use strict;
use warnings;

use LWP::UserAgent;
use XML::LibXML;
my $url = 'http://localhost:8080/api/xml?tree=jobs[name,description,color,healthReport[score,description]]';
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
my $response = $ua->get($url);

if ($response->is_success) {
        my $content = $response->decoded_content;
        #print $response->decoded_content;
        my $parser = XML::LibXML->new();
        my $xmldoc = $parser->load_xml($response->decoded_content);
        for my $job ($xmldoc->findnodes('/hudson/job')) {
                my $color = $job->findvalue('color/text()');
                print $color;
        }
}
于 2013-01-28T09:23:29.623 に答える