【发布时间】:2014-05-19 08:39:06
【问题描述】:
简单的xml文件cr.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>
我想遍历每个审阅者并将名称替换为新的名称
我并没有尝试同时使用这两种方法,而是通过其他帖子的形式,这两种方法都应该有效,但我不断收到错误:
Can't locate object method "setData"
Can't locate object method "removeChildNodes
Can't locate object method "appendText"
#!/usr/bin/perl -w
use strict;
use XML::LibXML;
my $critics_file = "cr.xml";
my $parser = new XML::LibXML;
print "Couldn't retrieve review details\n"
unless my $book_reviews = $parser->parse_file($reviews_file);
foreach my $critics ($critic_details->findnodes('/book_reviewers/results/reviewer')) {
my $value = $critics->findvalue('name'); #returns the correct name
$value->removeChildNodes();
$value->appendText('new_name');
##ONLY EITHER THE ABOVE METHOD OR THE ONE BELOW - NOT BOTH
my $node = $critics->findnodes('.//name.text()');#returns the correct name
$node->setData('new_name');
}
谁能看出我哪里出错了?
干杯
【问题讨论】:
-
如果找不到值或节点会怎样???
-
您的程序无法编译。请显示给出您描述的结果的代码
-
甚至 XML 都无效。这是一个非常粗心的问题。
标签: xml perl xml-libxml