我正在尝试使用Perl更改XML属性。
XML文件如下所示:
<Node>
<NodeX attr1="1" attr2="2" attr3="3"/>
</Node>
Perl脚本包含:
my @nodes = $doc->findnodes("//Node/Nodex");;
if (@nodes) {
my $res = $nodes[0]->hasAttribute("attr3");
if ($res) {
foreach (@nodes) {
$_->setAttribute('attr3', "10");
}
}
}
结果脚本不会更改属性。我已经测试了权限,脚本可以使用print
来编写和读取XML文件。
setAttribute
似乎什么都不做,尽管hasAttribute
返回true。
答案 0 :(得分:2)
节点的名称为NodeX
,而不是Nodex
。这就是你的代码出错了(除了你的评论之外,似乎你可能没有将改变后的XML写回文件),但这显示了你可能更喜欢的更简洁的方法。
use strict;
use warnings;
use XML::LibXML;
my $doc = XML::LibXML->load_xml(string => <<'__END_XML__');
<Node>
<NodeX attr1="1" attr2="2" attr3="3"/>
</Node>
__END_XML__
my ($attr) = $doc->findnodes('/Node/NodeX/@attr3');
$attr->setValue(10) if $attr;
print $doc->toString;
<强>输出强>
<?xml version="1.0"?>
<Node>
<NodeX attr1="1" attr2="2" attr3="10"/>
</Node>