我正在尝试使用 perl 和 XML::LibXML 附加 XML 文档的值。XML 文档有多个时间设置,我需要将其更改为新时间,但我无法让我的程序进行更改。目前,它将加载XML文件并可以将其打印到新文档,但不会更新我希望更改的设置。我对 perl 解析有点陌生,我以前写过一个 excel 解析器,但这个 XML 解析器给我带来了问题。
你能指出我可能犯错的地方或我是否遗漏了什么吗?
下面是 XML 的一个示例
<?xml version='1.0' ?><Settings xmlns='http://hme.com/Settings.xsd'>
<Setting SID="0">
<Name>Store ID</Name>
<Value>72</Value>
</Setting>
<Setting SID="1">
<Name>Deprecated</Name>
<Value>0</Value>
</Setting>
<Setting SID="8">
<Name>Open Store Hours Sunday</Name>
<Value>23400</Value>
</Setting>
这是我用来尝试更改时间的代码,并将下面的值更改为 value 和/value 之间的值到 109800。当我运行程序时,它会运行而不会引发任何错误,但也不会更新值。
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $settings_file = 'C:UserststevensDesktoptimer_test 8449.xml';
my $parser = XML::LibXML->new;
my $files = 'C:UserststevensDesktoptimer_test 8449.xml';
my $doc = $parser->parse_file($settings_file) or die "Couldn't parse timer settingsn";
for my $reviewer ($doc->findnodes('/Setting[@SID="8"]/Name/Value')) {
my ($name) = $reviewer->findnodes('Value');
$name->removeChildNodes;
$name->appendText('109800');
}
open (OUTFILE, ">>$files");
print OUTFILE $doc;
print "XML outputted to File";
任何帮助不胜感激,提前感谢您!
Value
元素不在Name
元素内,因此Name
不应位于层次结构中。
在for
循环中,$reviewer
节点查找另一个名为Value
的元素,因此您也不应在调用$doc->findnodes
中包含Value
。
也不清楚您的<Setting>
元素是否处于顶级。可能需要使用路径/Settings/Setting...
或//Setting...
...
for my $reviewer ($doc->findnodes('//Setting[@SID="8"]')) {
my ($name) = $reviewer->findnodes('Value');
...