perl XML ::简单打印问题



这是我的xml文件:

data.xml

<?xml version="1.0" encoding="UTF-8"?>
<ns1:BoardTestXMLExport numberOfIndictedComponents="6" testerTestStartTime=".00000:00" testTime=".00000:00" repairStationId="vvts03" testStatus="Reviewed Passed" testerTestEndTime=".00000:00" xmlns:ns1="http://tempuri.org/BoardTestXMLExport.xsd" numberOfIndictedPins="0" numberOfComponentsTested="113" numberOfJointsTested="0" numberOfDefects="6" repairStatus="Reviewed Passed">
          <ns1:StationXML testerName="huaemsaoi004" stage="V510"/>
          <ns1:TestXML name="d1">
                    <ns1:IndictmentXML algorithm="bep-3a98730h01l-lf" indictmentType="OCV Fail">
                              <ns1:RepairActionXML repairOperator="1066689" repairTime="2017-11-24T11:35:32.000+08:00" repairActionType="-" indictmentType="OCV Fail" comment="-" repairStatus="False Call"/>
                              <ns1:ComponentXML packageId="EP-3A98730H01L-LF" partId="EP-3A98730H01L-LF" designator="d1"/>
                    </ns1:IndictmentXML>
          </ns1:TestXML>
          <ns1:TestXML name="r2">
                    <ns1:IndictmentXML algorithm="rep-as30112h42l-lf" indictmentType="Right off">
                              <ns1:RepairActionXML repairOperator="1066689" repairTime="2017-11-24T11:35:32.000+08:00" repairActionType="-" indictmentType="Right off" comment="-" repairStatus="False Call"/>
                              <ns1:ComponentXML packageId="EP-AS30112H42L-LF" partId="EP-AS30112H42L-LF" designator="r2"/>
                    </ns1:IndictmentXML>
          </ns1:TestXML>
</ns1:BoardTestXMLExport>

我使用关注代码打印"起诉类型"one_answers"名称",但是它无法打印它们,代码如下:

# use module
 use strict;
 use warnings;
 use XML::Simple;
 use Data::Dumper;
 # create object
 my $xml = XML::Simple->new;
# read XML file
 my $data = $xml->XMLin("data.xml",KeyAttr=>"ns1");
 print Dumper($data);
 print $data ->{"ns1:TestXML"}->{"ns1:IndictmentXML"}->{"IndictmentType"};
 print $data ->{"ns1:TestXML"}->{"ns1:IndictmentXML"};

当我在计算机上尝试时,您的代码可以工作。当然,因为您发布了代码的图片,而不是将其发布为文本(我不知道为什么人们认为这很有用 - 您只是在烦恼您要帮助您的人!)键入您的代码,我有可能"不小心"修复任何错误引起您的问题的问题 - 我怀疑您试图打印的密钥的大写不匹配。

这也将有助于知道您正在使用哪个版本的XML :: Simple。您可能正在与已在最近版本中固定的错误进行奔跑。

值得指出一些事情。首先,XML ::简单包含此文本的文档:

此模块的状态

不建议在新代码中使用此模块。其他模块是 可用可提供更直接和一致的 接口。特别是,强烈建议使用xml :: libxml XML :: Twig是一个很好的选择。

该模块的主要问题是大量选项 (其中一些不幸的违约)以及任意的方式 这些选项相互作用 - 通常会产生意外结果。

带有错误修复和文档修复程序的补丁,但新的 不太可能添加功能。

鉴于该声明的清晰度,我不明白为什么有人仍然会使用该模块进行新开发。

您的代码中应始终具有use strictuse warnings。第一个将迫使您声明您的变量(使用my)。如果您避免使用new Class语法并改用Class->new,那么您将来的维护程序员将感谢您。

给定所有这些东西(好吧,除了我还没有替换xml :: Simple),您的代码看起来像这样:

#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
use Data::Dumper;
my $xml = XML::Simple->new;
my $data = $xml->XMLin('data.xml', KeyAttr => 'ns1');
print Dumper $data;
print $data->{repairStationId};

此代码对我的预期工作(但是,您的原始代码也是如此)。

最新更新