【问题标题】:Read multiple XML text values using XML::Simple使用 XML::Simple 读取多个 XML 文本值
【发布时间】:2018-06-26 01:26:57
【问题描述】:

我开始学习 XML::Simple模块 但我不明白如何读取标签和获取数据以供我使用。

下面是我从 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>

【问题讨论】:

标签: xml perl


【解决方案1】:

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")

【讨论】:

  • 感谢您的指导。但未找到/安装 XML::LibXML :-(
  • XML::Twig 可能已安装 - 这是另一个常见的选择。但没有任何 XML 解析器是“核心”(甚至不是 XML::Simple)。
猜你喜欢
  • 2011-04-11
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多