Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t locate对象方法setData-将值保存在XML文件中_Xml_Perl_Xml Parsing - Fatal编程技术网

Can';t locate对象方法setData-将值保存在XML文件中

Can';t locate对象方法setData-将值保存在XML文件中,xml,perl,xml-parsing,Xml,Perl,Xml Parsing,我有这样简单的XML <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <TCXML format="low_level" authKey="12345"> <Dataset acl_bits="0" creation_date="2019-04-03T13:42:47Z" dataset_type="#id6" island_id="4" elemId="id2478" last_mod_date

我有这样简单的XML

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<TCXML format="low_level" authKey="12345">

  <Dataset acl_bits="0" creation_date="2019-04-03T13:42:47Z" dataset_type="#id6" island_id="4" elemId="id2478" last_mod_date="2019-04-03T13:49:31Z" />
  <Dataset acl_bits="0" creation_date="2019-04-03T13:42:47Z" dataset_type="#id61" island_id="41" elemId="id2479" format_used="ASCII" last_mod_date="2019-04-03T13:49:31Z" />

</TCXML>

我搜索了Stack Overflow和Google。我仔细地读了一遍,但还是被卡住了。我做错了什么?

对于将来遇到这种情况的人来说,这就是我让它工作的方式。把戏是设定值的

foreach my $xmlNode ($dom->findnodes('//Dataset')) 
{
    my ($last_mod_date) = $xmlNode->findnodes('./@last_mod_date');

    print "last_mod_date: $last_mod_date ... \n";

    #change dates
    $last_mod_date->setValue('2019-04-11');

}


    #save xml file at the very end
    $dom->toFile('test100.xml');

这是因为
SetData
来自
XML::LibXML::Text
,只在特定类型的节点上工作;请参阅和,例如
SetData
用法。或者您可以在
Text
-类型节点上使用
SetData
。请参阅和@zdim谢谢您的链接。我将检查它们是否为“Trick was setValue”,否,OP中错误的实际修复是使用
my($last_mod_date)
而不是
my$last_mod_date
在列表上下文中调用
find
/
findnodes
。在列表上下文中,这些返回了独立的拨号节点。在标量上下文中,它们返回::NodeList对象。使用
setValue
(一种::Attr对象的方法)而不是
setData
(它不是)修复了第二个不同的问题。
Perl Starting ...

Looping Dataset ...

last_mod_date: 2019-04-03T13:49:31Z ...
Can't locate object method "setData" via package "XML::LibXML::NodeList" at test100.pl line 26.
foreach my $xmlNode ($dom->findnodes('//Dataset')) 
{
    my ($last_mod_date) = $xmlNode->findnodes('./@last_mod_date');

    print "last_mod_date: $last_mod_date ... \n";

    #change dates
    $last_mod_date->setValue('2019-04-11');

}


    #save xml file at the very end
    $dom->toFile('test100.xml');