[英]Unable to Append Text of XML Doc in Perl with 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 之间的值更改为 109800 的代码。当我运行程序时,它运行时不会抛出任何错误,但也不会更新值。
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $settings_file = 'C:\Users\tstevens\Desktop\timer_test\08449.xml';
my $parser = XML::LibXML->new;
my $files = 'C:\Users\tstevens\Desktop\timer_test\08449.xml';
my $doc = $parser->parse_file($settings_file) or die "Couldn't parse timer settings\n";
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');
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.