使用XML :: Simple读取多个XML文本值

时间:2018-06-25 15:20:48

标签: xml perl

我开始学习 https://www.paypal.com/us/webapps/mpp/partner-program/contact-us模块 但我不明白如何读取标签和获取数据以供使用。

以下是我尝试从XML文件解析一小段内容的尝试。我要选择customfieldvalue元素的文本内容的逗号分隔列表。

例如输出应为:

print "customfieldvalue are = $myvalues \n";
# customfieldvalue are = UNIX,PERL

阅读XML部分后,我陷入了困境,请帮助我实现这一目标。

#!/usr/bin/perl -w

use strict;

use XML::Simple;
use Data::Dumper;

my $xml   = new XML::Simple;
my $cdata = join('', <DATA>);

my $data = $xml->XMLin($cdata, KeyAttr => ['id']);
print Dumper($cdata);

__DATA__
<customfield id="customfield_66440" key="com.atlassian.jira.plugin.system.customfieldtypes:multiselect">
  <customfieldname>Program</customfieldname>
  <customfieldvalues>
    <customfieldvalue key="125160"><![CDATA[UNIX]]></customfieldvalue>
    <customfieldvalue key="125160"><![CDATA[PERL]]></customfieldvalue>
  </customfieldvalues>
</customfield>

1 个答案:

答案 0 :(得分:4)

XML::Simple says改用XML::LibXML

use XML::LibXML qw();

my $dom = XML::LibXML->load_xml(string => \<<'XML');
<customfield id="customfield_66440" key="com.atlassian.jira.plugin.system.customfieldtypes:multiselect">
    <customfieldname>Program</customfieldname>
    <customfieldvalues>
        <customfieldvalue key="125160"><![CDATA[UNIX]]></customfieldvalue>
        <customfieldvalue key="125160"><![CDATA[PERL]]></customfieldvalue>

    </customfieldvalues>
</customfield>
XML

my @values = map { $_->textContent } $dom->findnodes('//customfieldvalue');
# ("UNIX", "PERL")