2011-06-24 56 views
3

我有以下XML作为在变量$ myXML的字符串,并需要将其插入内部根 - >分组用perl插入XML字符串到节点

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

上面的XML需要内部根被插入 - >分组

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

我目前使用的XML ::嫩枝因此,最好,如果你使用能帮助我,

编辑: 我正在处理驻留在文件中的复杂< root>结构。我需要一种方法将< root> xml加载到perl中,并将我的xml字符串作为节点插入。同样在我的情况下,<分组>内部已经有一些节点。

+0

所以,在这种地方正是你想,因为你说你已经有了内部 Rahul

回答

3

这是我会怎么做:我会从XML中$myXML创建一个元素,然后将其添加为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); 
    } 
0

我错过了什么吗?

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

其他节点我处理复杂 s到插入'$ myxml'串..结构在文件中。我需要一种方法将 xml加载到perl中,并将我的xml字符串作为节点插入。在我的情况下,里面也有一些节点。 – user391986

+0

好吧,你应该说在这个问题... :) –

+0

对不起,试图保持简单,谢谢 – user391986

2

使用树枝处理程序在查看分组标记时插入内容。

假设你的root /分组数据为:

#!/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: [email protected]\n"; 
$xml->print; 
+0

非常感谢马克,这部分工作,但它覆盖了我已经在“分组”中的任何数据,而我需要附加它。 – user391986