2016-08-17 64 views
0

我的XML文件是这样的:反序列化XML节点,并将其放置在同一个XML文件

<root> 
    <node1> 
     <texts> 
       <text> 
        <type>type1</type> 
        <pro1>IN</pro1> 
        <pro2>ES</pro2> 
        <finalText><![CDATA[XXXXXXXXXX]]></finalText> 
      </text>   
    </texts> 
<node1> 
<root> 

我想复制的“文本”节点为每一个“PRO1”和“PRO2”节点。 我试图反序列化,但没有成功。我怎样才能做到这一点? 输出应该是这样的:

<root> 
    <node1> 
     <texts> 
       <text> 
     <type>type1</type> 
     <pro1>IN</pro1>     
     <finalText><![CDATA[XXXXXXXXXX]]></finalText> 
     </text> 
     <text> 
     <type>type1</type> 
     <pro2>ES</pro2>     
     <finalText><![CDATA[XXXXXXXXXX]]></finalText> 
     </text>  
    </texts> 
<node1> 
<root> 

回答

0

使用xsh,包装周围XML::LibXML

open file.xml ; 
for my $pro in /root/node1/texts/text/*[xsh:matches(name(), '^pro\d+$')] { 
    $new := cp $pro/../self::text before $pro/.. ; 
    rm $new/*[xsh:matches(name(), '^pro\d+$')][name() != name($pro)] ; 
} 
rm /root/node1/texts/text[last()] ; 

save :b;