json - 如何将 XML 属性转换为 Perl 中的元素?
问题描述
只有当 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>
如何获取元素而不是属性的输出。监控是否需要工作?
解决方案
XML::Simple 是可怕的模块。它自己的文档建议您避免使用它!
XML::Simple 是可用的最复杂的 XML 解析器,并且假设它甚至可以执行您希望它执行的操作。说到生成XML,悲惨地无望
使用XML::Writer什么的。
推荐阅读
- php - 从 PHP 中的顺序数组创建嵌套数组
- node.js - Conda 无法识别我已安装节点?
- bootstrap-4 - bootstrap.min.js:6 Uncaught TypeError: n is not a constructor return when I click the dropdown button
- sql - 自连接以从下一行的 customer_in_time 中减去一行的 customer_out_time
- javascript - 无法从外部函数中提取价值
- image - Flutter 裁剪 2 个旋转图像
- javascript - 使用javascript从html页面获取数据
- java - Android volley 返回 clienterror 400 [Bad request]
- javascript - 如何在 React JS 中仅显示结果但消失按钮
- python - 即使在指定error_bad_lines = False之后,在pandas中也会出现解析器错误