Perl XML:LibXML setAttribute不更改文档

时间:2014-02-16 14:42:02

标签: xml perl xml-attribute xml-libxml

我正在尝试使用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。

1 个答案:

答案 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>