这是一个基本的 XML 文档示例
<book_reviewers>
<results>
<reviewer>
<name>Anne</name>
<profession>Catfish wrangler</profession>
</reviewer>
<reviewer>
<name>Bob</name>
<profession>Beer taster</profession>
</reviewer>
<reviewer>
<name>Charlie</name>
<profession>Gardener</profession>
</reviewer>
</results>
</book_reviewers>
我想补充一点:
<reviewer>
<name>Joan</name>
<profession>Jett</profession>
</reviewer>
我尝试了多种解决方案的组合,这里有一个至少不会引发错误,但它也不起作用。
#!/usr/bin/perl
use XML::LibXML;
use strict;
my $filename = "cr.xml";
my $parser = XML::LibXML->new();
my $critic_details = $parser->parse_file("$filename") or die;
my $new_reviewer = $critic_details->documentElement;
my $reviewer_name = $critic_details->documentElement;
my $reviewer_prof = $critic_details->documentElement;
my $newnode = $critic_details->documentElement;
for my $reviewers($critic_details->findnodes("book_reviewers/results/reviewers")){
$new_reviewer = $reviewers->createElement("reviewer");
$reviewer_name = $new_reviewer->addChild("name");
$reviewer_name->appendText("Joan");
$reviewer_prof = $new_reviewer->addChild("profession");
$reviewer_prof->appendText("Jett");
$newnode = $reviewers->addSibling($new_reviewer); #also tried addChild
}
print $critic_details->toString;
我得到的输出是:
<?xml version="1.0"?>
<book_reviewers>
<results>
<reviewer>
<name>Anne</name>
<profession>Catfish wrangler</profession>
</reviewer>
<reviewer>
<name>Bob</name>
<profession>Beer taster</profession>
</reviewer>
<reviewer>
<name>Charlie</name>
<profession>Gardener</profession>
</reviewer>
</results>
</book_reviewers>
这只是原始数据
非常感谢任何帮助 - 我对 Perl 和 XML 都很陌生 干杯
最佳答案
有很多方法可以做到这一点
这种方式分别创建节点并将它们放在一起。它没有准备好生产,因为它假设有一个部分
#!/usr/bin/perl
use XML::LibXML;
use strict;
my $filename = "cr.xml";
my $parser = XML::LibXML->new();
my $critic_details = $parser->parse_file("$filename") or die;
my $reviewer = $critic_details->findnodes("book_reviewers/results")->[0];
my $node = XML::LibXML::Element->new("reviewer");
my $p = XML::LibXML::Element->new("profession");
my $pn = XML::LibXML::Text->new("Jett");
$p->addChild($pn);
my $n = XML::LibXML::Element->new("name");
my $nn = XML::LibXML::Text->new("Joan");
$n->addChild($nn);
$node->addChild($p);
$node->addChild($n);
$reviewer->addChild($node);
print $critic_details->toString;
这给了这个
<?xml version="1.0"?>
<book_reviewers>
<results>
<reviewer>
<name>Anne</name>
<profession>Catfish wrangler</profession>
</reviewer>
<reviewer>
<name>Bob</name>
<profession>Beer taster</profession>
</reviewer>
<reviewer>
<name>Charlie</name>
<profession>Gardener</profession>
</reviewer>
<reviewer><profession>Jett</profession><name>Joan</name></reviewer></results>
</book_reviewers>
关于xml - 向 XML::LibXML 对象添加新节点/元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23720486/