我使用XML :: Simple来解析数组,它总是给出No Close标记,而我确信有一个关闭标记...
这是直接从阵列打印时的输出 `
<ClearQuest db='XXX' login='XXXX' cqtan='1319' client='XXX.com' ip=''>
<defect id='dts0100' action='view' status='ok'>
<component>RA_Checks</component>
<description>Please, discuss before resolution.
</description>
<headline>[CSV] Got a warning </headline>
<id_short>799</id_short>
<owner>ABC</owner>
<planned_release.name>2013</planned_release.name>
</defect>
</ClearQuest>
`
始终没有看到元素的关闭标记。 以下是Iam解析的方法: `
my $a = join("",@cmdout);
my $ref= XMLin($a);
print $ref->{ClearQuest}->{defect}-{'id_short'};
print $ref;
`
任何人都可以帮我解决这个错误!
当我使用print Dumper \ @cmdout时,我得到了这个 `
$VAR1 = [
'<ClearQuest db=\'d1\' login=\'\' cqtan=\'1\' client=\'dhcp-3\' ip=\'1\'>
'
];
$VAR1 = [
'<ClearQuest db=\'dt\' login=\'\' cqtan=\'13\' client=\'dhcp-3\' ip=\'1\'>
',
' <defect id=\'dts0100\' action=\'view\' status=\'ok\'>
'
];
$VAR1 = [
'<ClearQuest db=\'dt\' login=\'\' cqtan=\'1\' client=\'dhcp-3\' ip=\'1\'>
',
' <defect id=\'dts0100\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
'
];
$VAR1 = [
'<ClearQuest db=\'d\' login=\'\' cqtan=\'1\' client=\'dhcp\' ip=\'137.202.34.85\'>
',
' <defect id=\'dts\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addresses for all my register instances
'
];
$VAR1 = [
'<ClearQuest db=\'d\' login=\'\' cqtan=\'1\' client=\'dhcp-3\' ip=\'1\'>
',
' <defect id=\'dts0100\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addresses for all my register instances
',
'
'
];
$VAR1 = [
'<ClearQuest db=\'dt\' login=\'sh\' cqtan=\'13\' client=\'d\' ip=\'\'>
',
' <defect id=\'dts0100\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addresses for all my register instances,
',
'
',
'I believe no warning should be produced
'
];
$VAR1 = [
'<ClearQuest db=\'\' login=\'s\' cqtan=\'\' client=\'dhcp\' ip=\'1\'>
',
' <defect id=\'dts0100799428\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addresses for all my register instance
',
'
',
'I believe no warning should be produced
',
'
'
];
$VAR1 = [
'<ClearQuest db=\'\' login=\'\' cqtan=\'\' client=\'dhcp-34-85.egc.mentorg.com\' ip=\'1\'>
',
' <defect id=\'dts\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addresses for all my register instances
',
'
',
'I believe no warning should be produced
',
'
',
'Please, discuss before resolution.
'
];
$VAR1 = [
'<ClearQuest db=\'d\' login=\'\' cqtan=\'13\' client=\'dhcp-34-\' ip=\'137\'>
',
' <defect id=\'dts01\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addresses for all my register instances
',
'
',
'I believe no warning should be produced
',
'
',
'Please, discuss before resolution.
',
'</description>
'
];
$VAR1 = [
'<ClearQuest db=\'dt\' login=\'s\' cqtan=\'131\' client=\'dhcp-34\' ip=\'13\'>
',
' <defect id=\'dts01\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addressed
',
'
',
'I believe no warning should be produced
',
'
',
'Please, discuss before resolution.
',
'</description>
',
' <headline>[CSV] Got a warning for a missing "Register Address" column.</headline>
'
];
$VAR1 = [
'<ClearQuest db=\'d\' login=\'\' cqtan=\'130\' client=\'dhcp\' ip=\'13\'>
',
' <defect id=\'dts0100799428\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addresses fornot appear!
',
'
',
'I believe no warning should be produced when that column
',
'
',
'Please, discuss before resolution.
',
'</description>
',
' <headline>[CSV] Got a warning for a missing "Register Address" column.</headline>
',
' <id_short>79</id_short>
'
];
$VAR1 = [
'<ClearQuest db=\'dt1\' login=\\' cqtan=\'\' client=\'dhcp-34-85.egc.mentorg.com\' ip=\'1\'>
',
' <defect id=\'dts0\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addresses for all my register instances,
',
'
',
'I believe no warning should be produced
',
'
',
'Please, discuss before resolution.
',
'</description>
',
' <headline>[CSV] Got a warning for a missing "Register Address" column.</headline>
',
' <id_short></id_short>
',
' <owner>am</owner>
'
];
$VAR1 = [
'<ClearQuest db=\'dts1\' login=\'\' cqtan=\'131\' client=\'dhcp\' ip=\'13\'>
',
' <defect id=\'dts01\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addresses for all my register instances
',
'
',
'I believe no warning should be produced
',
'
',
'Please, discuss before resolution.
',
'</description>
',
' <headline>[CSV] Got a warning for a missing "Register Address" column.</headline>
',
' <id_short>799428</id_short>
',
' <owner>am</owner>
',
' <planned_release.name>2013.1</planned_release.name>
'
];
$VAR1 = [
'<ClearQuest db=\'dt\' login=\'\' cqtan=\'\' client=\'dhcp-3\' ip=\'13\'>
',
' <defect id=\'dts0\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addresses for all my register instances
',
'
',
'I believe no warning should be produced
',
'
',
'Please, discuss before resolution.
',
'</description>
',
' <headline>[CSV] Got a warning for a missing "Register Address" column.</headline>
',
' <id_short></id_short>
',
' <owner></owner>
',
' <planned_release.name>2013.1</planned_release.name>
',
' </defect>
'
];
$VAR1 = [
'<ClearQuest db=\'dts01\' login=\'\' cqtan=\'\' client=\'dhcp-34-...com\' ip=\'1\'>
',
' <defect id=\'dts010\' action=\'view\' status=\'ok\'>
',
' <component>RA_Checks</component>
',
' <description>I have specified addresses for all my register instances
',
'
',
'I believe no warning should be produced
',
' ' <id_short>798</id_short>
',
' <owner>a</owner>
',
' <planned_release.name>2013.1</planned_release.name>
',
' </defect>
',
'</ClearQuest>'
];
`
答案 0 :(得分:2)
XML::Simple
是解析XML的不错选择。它可能远非“简单”使用,它自己的文档说明了这一点。
不鼓励在新代码中使用此模块。其他模块可用,提供更直接和一致的接口。
然而,它能够检测格式错误的XML,并且您显示的数据很好;如果您将该文字文本传递给XMLin
进行处理,则不会引发错误。
所以你传递的数据并不是你想象的那样。我建议你用
仔细查看你的数组use Data::Dumper;
print Dumper \@cmdout;
并且,如果您仍然无法解决问题,请在此处发布该输出,以供我们查看。
答案 1 :(得分:-1)
你需要:
$ref->{defect}->{'id_short'};