-2

を使用して XML 属性値を変更したいと考えていますXML::Twig。私はこの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>

このコードを試しましたが、内容が変更されていません

my $doc = XML::Twig->new->parsefile('pattern.xml');
my $xpath = '/model';
my ($attr) = $doc->findnodes($xpath);
$attr->set_att(name => 'dfdsa');
4

1 に答える 1

1

あなたがこの問題を自分で解決しようとほとんど何もしていないように見えることに、私は非常に失望しています. あなたの質問の XML でさえ形式が正しくなく、修正する必要がありました。

このプログラムはあなたが望むことをします

use strict;
use warnings;

use 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 => 'indented');

出力

<model name="dfdsa" oid="i">
  <system listing="NO" oid="1" uri="/gaia">
    <schema desc="HTTP Sever schema" enab="YES" name="HTTP" oid="1" prio="5"></schema>
  </system>
</model>
于 2012-08-13T07:07:21.283 に答える