【发布时间】:2014-09-03 10:52:34
【问题描述】:
我想在 perl 中使用 xpath 为元素插入祖先和兄弟。
这是我的意见
<docinfo:hier>
<docinfo:hierlev role="ancestor">
<heading>
<title>CENTRAl</title>
</heading>
<docinfo:hierlev role="ancestor">
<heading>
<title>A</title>
</heading>
<docinfo:hierlev role="ancestor">
<heading><title>AC</title></heading>
<docinfo:hierlev role="ancestor">
<heading><title>THE ACTUARIE</title></heading>
<docinfo:hierlev role="ancestor">
<heading><title>CHAPTER VII </title></heading>
<docinfo:hierlev role="me">
<heading>
<title>46. Terms and conditions of Chairman and Members of Board.</title>
</heading>
</docinfo:hierlev>
</docinfo:hierlev>
</docinfo:hierlev>
</docinfo:hierlev>
</docinfo:hierlev>
</docinfo:hierlev>
我想要这样的输出:
##代表新插入的元素
<docinfo:hier>
<docinfo:hierlev role="ancestor">
<heading><title>Rules</title></heading># here i want change the text
<docinfo:hierlev role="ancestor">##
<heading>##
<title>Rule</title>##
</heading>##
<docinfo:hierlev role="ancestor">
<heading><title>A</title></heading>
<docinfo:hierlev role="ancestor">
<heading><title>AC</title></heading>
<docinfo:hierlev role="ancestor">
<heading><title>THE ACTUARIE</title></heading>
<docinfo:hierlev role="ancestor">
<heading><title>CHAPTER VII </title></heading>
<docinfo:hierlev role="me">
<heading>
<title>46. Terms and conditions of Chairman and Members of Board.</title>
</heading>
</docinfo:hierlev>
</docinfo:hierlev>
</docinfo:hierlev>
</docinfo:hierlev>
</docinfo:hierlev>
</docinfo:hierlev>##
</docinfo:hierlev>
</docinfo:hier>
这是我的源代码
当我运行代码时,它只插入元素标题。
#!/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('/LEGDOC/docinfo/docinfo:hier/docinfo:hierlev/heading');
my $new_element= $doc->createElement("docinfo:hierlev");
my $new_element= $doc->createElement("heading");
my $new_element= $doc->createElement("title");
$new_element->appendText('rule');
$ref_node->parentNode->insertAfter($new_element, $ref_node);
print $root->toString(1);
【问题讨论】:
-
你声明了
$new_element三次。这会产生警告。 -
嗨 Friedo 感谢您的建议,我已经更改了变量名,但它也无法正常工作
标签: xml perl xpath perl-module