1

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

setAttributehasAttribute尽管返回 true ,但似乎什么也没做。

4

1 回答 1

3

节点的名称是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>
于 2014-02-16T16:22:31.703 回答