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

发布于 2024-08-02 10:21:10 字数 580 浏览 6 评论 0原文

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

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

我想要的最终输出是:

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

My twig $t is at 。现在我想向第二个 添加一个属性。该属性为 ATVAL="value2"。我尝试了以下方法:

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

这不起作用。这段代码有什么问题?还有其他方法可以做到这一点吗?

I have an XML string like this:

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

The final output I want is:

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

My twig $t is at <DATA>. Now I want to add an attribute to the second <CHILD_DATA />. The attribute is ATVAL="value2". I tried the following:

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

This didn't work. What's wrong with this code? Is there another way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

莫言歌 2024-08-09 10:21:10

正如乔恩向您暗示的那样,您发布的代码中有语法错误。您应该看到如下编译错误:

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

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

这是一个可以完成您想要的操作的程序:

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 );

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

$twig->flush;

As Jon hinted to you, you have a syntax error in the code you posted. You should have seen a compile error like:

syntax error at test line 18, near "->set_att{"
Execution of program.pl aborted due to compilation errors.

However, you might have typed the code into your answer so that code doesn't match what you are actually doing. Always put the actual code into your question rather than re-typing it, and always post a full program when you can. When you post your program, I don't have to start from scratch to debug what I think you might be doing. :)

Here's a program that does what you want:

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 );

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

$twig->flush;
软糖 2024-08-09 10:21:10

只是一些想法:

  1. 多次发布相同的问题
    时代不会讨好任何人
    来帮助您。

  2. 你的代码在语法上根本不符合
    正确,所以我并不感到惊讶你
    遇到问题。

  3. 为什么不包括你的错误
    得到?也许这可能会减少一些
    阐明问题?

Just a few thoughts:

  1. Posting the same question multiple
    times is not going to endear anyone
    to helping you.

  2. Your code isn't even syntactically
    correct, so I'm not surprised you're
    experiencing problems.

  3. Why not include the errors you are
    getting? Perhaps that might shed some
    light on the problem?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文