无法在 Perl 中将 XML 文档的文本与 XML::LibXML 一起追加



我正在尝试使用 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_test8449.xml';
my $parser = XML::LibXML->new;
my $files = 'C:UserststevensDesktoptimer_test8449.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');
...

相关内容

  • 没有找到相关文章

最新更新