2016-08-17 2 views
0

meine XML-Datei ist wie folgt:deserialize XML-Knoten und legen Sie sie in der gleichen XML-Datei

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

ich den „Text“ Knoten für jeden „pro1“ und „Pro2“ Knoten duplizieren möchten. Ich habe versucht, zu deserialisieren, aber keinen Erfolg. Wie kann ich das erreichen? Die Ausgabe sollte so aussehen:

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

Antwort

0

Mit xsh, ein Wrapper um 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; 
Verwandte Themen