反序列化xml节点并将其放在同一个xml文件中

时间:2016-08-17 12:58:01

标签: xml serialization nodes

我的XML文件是这样的:

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

我想复制&#34;文字&#34;每个&#34; pro1&#34;的节点和&#34; pro2&#34;节点。 我试图反序列化但没有成功。我怎样才能做到这一点? 输出应该是这样的:

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

1 个答案:

答案 0 :(得分:0)

使用xshXML::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;