繁体   English   中英

无法使用 XML::LibXML 在 Perl 中附加 XML 文档的文本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM