XML::LibXML удалить заголовок при записи в xml

Когда я обновляю значение с помощью XML::LibXML, первые две строки удаляются. Я хочу сохранить xml как есть, за исключением одного обновленного значения.

Мой оригинальный xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <property>
   <name>test.name</name>
   <value>help</value>
   <description>xml issue</description>
 </property>

....

И код:

my $parser =XML::LibXML->new();
my $tree   =$parser->parse_file($file) or die $!;
my $root   =$tree->getDocumentElement;

my $searchPath="/configuration/property[name=\"$name\"]/value/text()";
my ($val)=$root->findnodes($searchPath);

$val->setData($new_val);
open (UPDXML, "> $file") or die "ERROR: Failed to write into $file...";
 print UPDXML $root->toString(1);
close (UPDXML);

Я пробовал с помощью print UPDXML $root->toStringC14N(1), но это не помогает...


person Greg Dan    schedule 09.02.2012    source источник


Ответы (3)


Оба ответа daxim и rpg делают это, но, чтобы подчеркнуть, используйте $tree->toString() вместо $root->toString(), чтобы получить весь файл.

person bvr    schedule 09.02.2012

См. toFile в XML::LibXML::Document. Обязательно прочитайте документацию программного обеспечения, с которым вы работаете.

use strictures;
use XML::LibXML qw();
my $file    = 'fnord.xml';
my $name    = 'test.name';
my $new_val = 'foo';

my $parser  = XML::LibXML->new;
my $tree    = $parser->parse_file($file);
my $root    = $tree->getDocumentElement;

my $searchPath  = "/configuration/property[name='$name']/value/text()";
my ($val)       = $root->findnodes($searchPath);

$val->setData($new_val);
$tree->toFile($file);

Файловые подпрограммы автоматически вызывают исключения, нет необходимости в традиционной проверке ошибок Perl.

person daxim    schedule 09.02.2012
comment
10x. В cpan указано, что это то же самое, что и toString, но хорошо работает с большим файлом, поэтому я не пробовал. - person Greg Dan; 09.02.2012

Пожалуйста, попробуйте это

$tree->toFile ($file);
person rpg    schedule 09.02.2012