如何为元素插入祖先



我想插入B1元素作为'C'元素的祖先。下面我粘贴了我的示例xml和perl代码

输入

  <A>
   <B>
    <C>
     <D>name</D>
     <E>number</E>
    </C>
   </B>
  </A>

<A>
  <B>
   <B1></B1>
     <C>
      <D>name</D>
      <E>number</E>
     </C>
  </B>
  </A>

我想要这样的输出

 <A>
  <B>
   <B1>
     <C>
      <D>name</D>
      <E>number</E>
     </C>
    <B1>
  </B>
  </A>

我的代码

当我运行代码时,它只插入元素标题而不创建一个访问

#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $parser = XML::LibXML->new;
my $doc = $parser->parse_file("mytest.xml");
my $root = $doc->getDocumentElement();
my ($ref_node) = $doc->findnodes('AB');
my $new_element= $doc->createElement("B1");
$ref_node->parentNode->insertAfter($new_element, $ref_node);
print $root->toString(1);

您必须删除内部节点并将其插入到新元素中:

#!/usr/bin/perl
use warnings;
use strict;
use XML::LibXML;
my $doc         = 'XML::LibXML'->load_xml( location => 'mytest.xml' );
my $root        = $doc->getDocumentElement();
my $new_element = $doc->createElement('B1');
my ($parent) = $doc->findnodes('/A/B');
my ($inner)  = $parent->findnodes('C');
$new_element->addChild($inner);
$parent->addChild($new_element);
print $root->toString();

或者对于更短的代码,使用XML::XSH2:

open mytest.xml ;
wrap B1 A/B/C ;
save :b ;

相关内容

  • 没有找到相关文章

最新更新