XML中没有关闭标记标记:: Perl中的简单标记

时间:2013-07-14 12:36:49

标签: xml perl xml-parsing

我使用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>'
            ];

`

2 个答案:

答案 0 :(得分:2)

XML::Simple是解析XML的不错选择。它可能远非“简单”使用,它自己的文档说明了这一点。

  

不鼓励在新代码中使用此模块。其他模块可用,提供更直接和一致的接口。

然而,它能够检测格式错误的XML,并且您显示的数据很好;如果您将该文字文本传递给XMLin进行处理,则不会引发错误。

所以你传递的数据并不是你想象的那样。我建议你用

仔细查看你的数组
use Data::Dumper;
print Dumper \@cmdout;

并且,如果您仍然无法解决问题,请在此处发布该输出,以供我们查看。

答案 1 :(得分:-1)

你需要:

$ref->{defect}->{'id_short'};