【问题标题】:How to convert XML attributes to elements in Perl?如何将 XML 属性转换为 Perl 中的元素?
【发布时间】:2020-11-08 15:03:06
【问题描述】:

我的监控应用程序仅在 XML 作为元素呈现时才读取。 但我的源应用程序只提供 JSON 输出。我尝试使用以下 perl 代码将 JSON 输出转换为 XML:

# Capture the API output
if ($ApiResponse->is_error())
{
    my $errorMsg = $ApiResponse->status_line();
    print "error : $errorMsg\n Sending Connectivity Error\n";
}
elsif ($ApiResponse->is_success()) 
{       
    my $JSONOutput = JSON->new->utf8->convert_blessed(1)->decode($ApiResponse->content()); 
    my $XMLOutput = XMLout($JSONOutput);
}

我的输出 XML 看起来像

<opt>
  <rowset affectedRows="444" dbname="custom" osname="SOMNI" tblname="tsiobm">
    <rows FirstOccurrence="1594021452" Node="host" RowSerial="250" Serial="98567869" Severity="5" Summary="SDV134E TWS JOB=A76DT803 JOB04878 WS=PROD APPL=A76DT80S ERROR=JCL  ID=DT803" Status="20" Prob_nr="SDV134E" />
    <rows FirstOccurrence="1594130034" Node="router-ess-vpn.elber.west" RowSerial="329" Serial="98639905" Severity="5" Summary="Tunnel2 Default Interface Ping/Default Interface Ping fail for 10.23.9.5: ICMP timeout" Status="20" Prob_nr="SDV_IDWN" />
    <rows FirstOccurrence="1594126166" Node="host" RowSerial="327" Serial="98637375" Severity="5" Summary="+SDV131E U00PR T09R905V 03:05:07 ACICSN1 RACINITI T09R9 STCOPC" Status="20" Prob_nr="SDV131E" />
    <rows FirstOccurrence="1594012257" Node="upjbxs1_adapter_9128" RowSerial="233" Serial="98561743" Severity="5" Summary="HTTP::Globo::Webserver: CRITICAL; Details: Fehler aufgetreten! - 3/3 " Status="20" Prob_nr="GSA_HTTP_Status" />
  </rowset>
</opt>

如何获取元素而不是属性的输出。监控是否需要工作?

【问题讨论】:

标签: json xml perl


【解决方案1】:

XML::Simple 是 horrible module。它自己的文档advises你避免它!

XML::Simple 是可用的最复杂的 XML 解析器,并且假设它甚至可以执行您希望它执行的操作。说到生成XML,悲惨地没有希望了

使用XML::Writer 或其他东西。

【讨论】:

    【解决方案2】:

    谢谢,我意识到 XML::Simple 是多么复杂,以后不会再使用它了。 但是现在,将 XMLout($JSONOutput) 更改为 XMLout($JSONOutput, NoAttr => 1) 给了我作为元素的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      相关资源
      最近更新 更多