Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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::Twig更改XML属性值_Perl_Perl Module_Xml Twig - Fatal编程技术网

Perl 使用XML::Twig更改XML属性值

Perl 使用XML::Twig更改XML属性值,perl,perl-module,xml-twig,Perl,Perl Module,Xml Twig,我想使用更改XML属性值。我可以像这样使用XML::LibXML来实现这一点 my $doc = XML::LibXML->new->parsefile(); my $xpath = '/model/@name'; my ($attr) = $doc->findnodes($xpath); $attr->setValue('dfdsa'); 但是由于一些限制,我不得不使用XML::Twig 输入 <

我想使用更改XML属性值。我可以像这样使用
XML::LibXML
来实现这一点

       my $doc = XML::LibXML->new->parsefile();
       my $xpath = '/model/@name';
       my ($attr) = $doc->findnodes($xpath);    
       $attr->setValue('dfdsa'); 
但是由于一些限制,我不得不使用
XML::Twig

输入

<model name="XXXX" oid="i">
  <system oid="1" uri="/gaia" listing="NO">
    <schema desc="HTTP Sever schema" enab="YES" name="HTTP" oid="1" prio="5">
    </schema>
  </system>
</model>
<model name="dfdsa" oid="i">
  <system oid="1" uri="/gaia" listing="NO">
    <schema desc="HTTP Sever schema" enab="YES" name="HTTP" oid="1" prio="5">
    </schema>
  </system>
</model>

我很失望,你似乎什么也没做,试图自己解决这个问题。甚至你问题中的XML格式也不正确,我必须修复它

这个程序会做你想做的

使用严格;
使用警告;
使用XML::Twig;
my$twig=XML::twig->new;
$twig->parsefile('pattern.xml');
my($model)=$twig->findnodes('/model[@name]');
$model->set_att(name=>'dfdsa');
$twig->print(pretty_print=>“缩进”);
输出

<model name="XXXX" oid="i">
  <system oid="1" uri="/gaia" listing="NO">
    <schema desc="HTTP Sever schema" enab="YES" name="HTTP" oid="1" prio="5">
    </schema>
  </system>
</model>
<model name="dfdsa" oid="i">
  <system oid="1" uri="/gaia" listing="NO">
    <schema desc="HTTP Sever schema" enab="YES" name="HTTP" oid="1" prio="5">
    </schema>
  </system>
</model>


您尝试了什么?属性值的设置是通过
$elt->set_att(name=>'dfdsa')
Hello Minard,我在下面进行了尝试,但没有修改内容:(my$doc=XML::Twig->new->parsefile('pattern.XML');my$xpath='/model';my$attr=$doc->findnodes($xpath);$attr->set_att(name=>dfdsa'));即使我尝试了下面的Bud,也无法使用XML::Twig->new(Twig_handlers=>{'model'=>sub{$\uu->set_att(name=>'dfdsa')},)->parsefile('pattern.XML'));应该可以。请发布一个合适的测试用例,其中包含我们可以运行的代码,如果可能的话,包括数据部分中的数据。如果没有它,我们所能做的就是猜测。这也将避免XML无效。我不确定如何修复拼写错误和弄乱人名的问题(Bud是啤酒,minard不是我的名字)--(如果您在某个时候输出XML::Twig对象,那么您的代码可以工作。它不会神奇地更新磁盘上的文件。您需要在代码末尾有一个
$doc->print
,或者
$doc->print_to_file(…)