使用perl insert string xml到节点

时间:2011-06-24 18:05:49

标签: xml perl

我在变量$ myXML中将以下xml作为字符串,需要将其插入root->分组

<mydata seq="ee">
    <subdata name="bla" value="bla" />
</mydata>

上面的xml需要插入root-&gt;分组

<root>
  <grouping>    
  </grouping>
</root>

我目前正在使用XML :: Twig,理想情况下,如果你可以帮我使用

修改 我正在处理一个复杂的&lt; root&gt;驻留在文件中的结构。我需要一种方法来加载&lt; root&gt;将xml插入perl并将我的xml字符串作为节点插入。在我的情况下&lt;分组&gt;已经有一些节点。

3 个答案:

答案 0 :(得分:3)

我会这样做:我会在$myXML中的XML中创建一个元素,然后将其添加为grouping的最后一个孩子:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Twig;

my $myXML='<mydata seq="ee"><subdata name="bla" value="bla" /></mydata>';

my $t= XML::Twig->new( twig_handlers => { grouping => sub { grouping( $myXML, @_); }, })
                ->parsefile( "so_insert.xml");

$t->print;
exit;

sub grouping
  { my( $xml, $t, $grouping)= @_;
    my $new_elt= XML::Twig::Elt->parse( $xml);
    $new_elt->paste( last_child => $grouping);
  }

答案 1 :(得分:2)

使用twig处理程序在看到分组标记时插入内容。

假设您的根/分组数据位于foo.xml

#!/usr/bin/perl

use strict;
use warnings;

use XML::Twig;

my $myXML = <<'EOT';
<mydata seq="ee">
    <subdata name="bla" value="bla" />
</mydata>
EOT

my $xml = XML::Twig->new(
    pretty_print => 'indented',
    twig_handlers => {
        grouping => sub { $_->set_text($myXML)->set_asis; }
    });

$xml->parsefile("foo.xml") or die "Failed parse of foo.xml: $@\n";
$xml->print;

答案 2 :(得分:0)

我错过了什么吗?

$myXML = '<root><grouping>' . $myXML . '</grouping></root>';