У меня есть XML файл
<PARENT >
<TAG string1="asdf" string2="asdf" >
</TAG >
</PARENT>
Я хочу извлечь здесь значение string2 .. и также хочу установить для него новое значение ..
Как это сделать?
У меня есть XML файл
<PARENT >
<TAG string1="asdf" string2="asdf" >
</TAG >
</PARENT>
Я хочу извлечь здесь значение string2 .. и также хочу установить для него новое значение ..
Как это сделать?
Используйте выражения XPath
use strict;
use warnings;
use XML::LibXML;
use Data::Dumper;
my $doc = XML::LibXML->new->parse_string(q{
<PARENT>
<TAG string1="asdf" string2="asdfd">
</TAG>
</PARENT>
});
my $xpath = '/PARENT/TAG/@string2';
# getting value of attribute:
print Dumper $doc->findvalue($xpath);
my ($attr) = $doc->findnodes($xpath);
# setting new value:
$attr->setValue('dfdsa');
print Dumper $doc->findvalue($xpath);
# do following if you need to get string representation of your XML structure
print Dumper $doc->toString(1);
И, конечно, читайте документацию :)
Вы также можете использовать XML :: Parser, чтобы получить значение. Для получения дополнительной информации см. документацию XML :: Parser:
#!/usr/local/bin/perl
use strict;
use warnings;
use XML::Parser;
use Data::Dumper;
my $attributes = {};
my $start_handler = sub
{
my ( $expat, $elem, %attr ) = @_;
if ($elem eq 'TAG')
{
$attributes->{$attr{'string1'}} = 'Found';
}
};
my $p1 = new XML::Parser(
Handlers => {
Start => $start_handler
}
);
$p1->parsefile('test.xml');
print Dumper($attributes);
Думаю, вам лучше начать с XML :: Simple и поиграть с сначала немного:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
my $xml = XMLin(\*DATA);
print $xml->{TAG}->{string2}, "\n";
$xml->{TAG}->{string2} = "asdf";
print XMLout( $xml, RootName => 'PARENT');
__DATA__
<PARENT>
<TAG string1="asdf" string2="value of string 2">
</TAG>
</PARENT>
Спасибо за ответы. Я нашел другой ответ в "Обработка файла конфигурации с помощью LibXML2" который я нашел очень полезным.