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()');
    
  • 打印作业名称:颜色

    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 回答
0

XML::Hash是将 XML 字符串转换为 perl 哈希的另一个很好的选择。

# Conversion from a XML String to a Hash
my $xml_converter = XML::Hash->new();
my $xml_hash = $xml_converter->fromXMLStringtoHash($xml);
于 2015-01-23T19:56:09.230 回答