【问题标题】:Unable to loop inside a call to XML::Generator无法在对 XML::Generator 的调用中循环
【发布时间】:2017-05-12 10:45:52
【问题描述】:

我正在尝试使用for 循环将数组@cpuinfo 中的每个项目放入单独的<cpu> 元素中 在 XML 文档中 使用XML::Generator

# @cpuinfo contain cpu information of multiple cpu's
use XML::Generator;

my $gen = XML::Generator->new( 'escape' => 'always', 'pretty' => 10 );

my $xml = $gen->servers(
   $gen->server(

      $gen->cpuinfo(

         foreach $r (@cpuinfo){
            $gen->cpu;
            (  {  $gen->cpu( @cpuinfo[$r] );
               }
            )
         }

      )
   ),
);

【问题讨论】:

  • 欢迎使用 Stack Overflow 和 Perl 标签。我已经修复了您问题中代码中损坏的标记。下次请在提交之前重新阅读您的帖子。
  • 您的代码有语法错误。目前尚不清楚这些是否来自将其复制到问题中,或者它们是否存在于您的真实代码中。您应该edit 您的问题并包括您正在运行的实际代码,以及实际缩进和所有内容。要将代码显示为 Stack Overflow 中的代码,请选择所有代码并按键盘上的 ctrl + k 或单击编辑器上方的 {} 按钮。还请向我们展示@cpuinfo 可能包含的内容、它现在生成的 XML 的样子以及您期望的 XML 类型的示例。
  • 谢谢辛巴克
  • 是的,我认为您可能需要在这里回溯,并提供输入数据和所需的输出 - 我认为这可以做得更好,但在不知道这些事情的情况下我无能为力。
  • 编辑做得很好,但你的循环中间还有一个;。您甚至可以从缩进代码的方式中看到这一点(这很好,顺便说一句)。有$gen->cpu;,后跟一个开放括号(。这实质上是在没有 args 的情况下调用 $gen->cpu,然后创建一个空列表,其中包含一个包含一条语句的块,这应该是语法错误。你真的应该打开use strictuse warnings。你还有@cpuinfo[$r],应该是$cpuinfo[$r] sigil 需要引用那个值是什么,并且数组元素是标量。

标签: xml perl perl-module


【解决方案1】:

您似乎对 Perl 一点也不熟悉,这里不适合做教程,但是大多数语言不允许您将可执行循环放在参数列表中。您需要调用map,它将一个数据列表“映射”到另一个数据列表中。在这种情况下,它将@cpuinfo 中的文本项列表映射到XML::Generator 对象列表,每个对象代表一个<map> 元素

请记住,您必须始终use strictuse warnings 'all' 放在您编写的每个 Perl 程序的顶部,并用my 将每个变量声明为close尽可能到它的第一个使用点,最好是在它被定义的点

use strict;
use warnings 'all';

use XML::Generator;

my @cpuinfo = qw/ A B C /;

my $gen = XML::Generator->new( escape => 'always', pretty => 2 );

my $xml = $gen->servers(
    $gen->server(
        $gen->cpuinfo(
            map { $gen->cpu($_) } @cpuinfo
        )
    )
);

print $xml, "\n";

输出

<servers>
  <server>
    <cpuinfo>
      <cpu>A</cpu>
      <cpu>B</cpu>
      <cpu>C</cpu>
    </cpuinfo>
  </server>
</servers>

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 2019-02-17
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多