2016-08-17 60 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;