Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
Perl XML:LibXML setAttribute不更改文档_Xml_Perl_Xml Attribute_Xml Libxml - Fatal编程技术网

Perl XML:LibXML setAttribute不更改文档

Perl XML:LibXML setAttribute不更改文档,xml,perl,xml-attribute,xml-libxml,Xml,Perl,Xml Attribute,Xml Libxml,我正在尝试使用Perl更改XML属性 XML文件如下所示: <Node> <NodeX attr1="1" attr2="2" attr3="3"/> </Node> 因此,脚本不会更改属性。我已经测试了权限,脚本可以使用print写入和读取XML文件 setAttribute似乎什么也不做,尽管hasAttribute返回true。节点的名称是NodeX,而不是NodeX。这就是您的代码的全部错误(除了,从您的注释来看,您似乎没有将修改后的XML写回文

我正在尝试使用Perl更改XML属性

XML文件如下所示:

<Node>
  <NodeX attr1="1" attr2="2" attr3="3"/>
</Node>
因此,脚本不会更改属性。我已经测试了权限,脚本可以使用
print
写入和读取XML文件


setAttribute
似乎什么也不做,尽管
hasAttribute
返回true。

节点的名称是
NodeX
,而不是
NodeX
。这就是您的代码的全部错误(除了,从您的注释来看,您似乎没有将修改后的XML写回文件),但这显示了您可能更喜欢的更简洁的方法

use strict;
use warnings;

use XML::LibXML;

my $doc = XML::LibXML->load_xml(string => <<'__END_XML__');
<Node>
  <NodeX attr1="1" attr2="2" attr3="3"/>
</Node>
__END_XML__

my ($attr) = $doc->findnodes('/Node/NodeX/@attr3');

$attr->setValue(10) if $attr;

print $doc->toString;
使用严格;
使用警告;
使用XML::LibXML;
my$doc=XML::LibXML->load_XML(字符串=>setValue(10),如果$attr;
打印$doc->toString;
输出

<?xml version="1.0"?>
<Node>
  <NodeX attr1="1" attr2="2" attr3="10"/>
</Node>


如何检查属性是否未更改?XML输出到哪里?文档的其他方面是否可以更改?脚本完成后,我只需阅读XML文件。文档的其余部分在XSLT中处理,其余所有属性都根据XSLT中指定的函数进行设置。其他问题如下:您可能正在将文件解析为DOM,对DOM进行更改,但忘记将更改后的DOM写回文件?谢谢您的回答。问题正是您提到的第二个问题,而不是写回更改。我(错误地)认为setAttribute()会为我做这件事。
<?xml version="1.0"?>
<Node>
  <NodeX attr1="1" attr2="2" attr3="10"/>
</Node>