如何使用Perl的XML :: Twig向子元素添加属性?

时间:2009-08-12 06:26:47

标签: xml perl xml-twig

我有一个像这样的XML字符串:

<DATA>
   <CHILD_DATA ATVAL="value1"/>
   <CHILD_DATA />
</DATA>

我想要的最终输出是:

<DATA>
   <CHILD_DATA ATVAL="value1"/>
   <CHILD_DATA ATVAL="value2"/>
</DATA>

我的树枝$t位于<DATA>。现在我想为第二个<CHILD_DATA />添加一个属性。该属性为ATVAL="value2"。我尝试了以下方法:

$t->last_child('CHILD_DATA')->set_att{"ATVAL","value2"};

这不起作用。这段代码出了什么问题?还有另一种方法吗?

2 个答案:

答案 0 :(得分:6)

正如Jon向您暗示的那样,您发布的代码中存在语法错误。你应该看到一个编译错误,如:

  

测试线18处的语法错误,靠近“ - &gt; set_att {”   由于编译错误,program.pl的执行中止。

但是,您可能已将代码输入到答案中,以便代码与您实际执行的操作不匹配。始终将实际代码放入您的问题而不是重新输入,并始终发布完整的程序。当您发布程序时,我不必从头开始调试我认为您可能正在做的事情。 :)

这是一个完成你想要的程序:

#!/usr/bin/perl

use XML::Twig;

my $xml = <<'XML';
<DATA>
   <CHILD_DATA ATVAL="value1"/>
   <CHILD_DATA />
</DATA>
XML

my $twig= XML::Twig->new( keep_spaces => 1 );

    $twig->parse( $xml );

    $t = $twig->root;

    $t->last_child('CHILD_DATA')->set_att("ATVAL" => "value2");

$twig->flush;

答案 1 :(得分:2)

只是一些想法:

  1. 发布多个相同的问题 时代不会让任何人都喜欢 帮助你。

  2. 您的代码甚至不是语法上的 是的,所以我并不感到惊讶 遇到问题。

  3. 为什么不包含您的错误 得到些什么?也许这可能会有所减少 关于这个问题?