У меня возникли трудности с записью в файл strings.xml, который содержит XLIFF-элемент с использованием LibXML. Обратите внимание, что я пытаюсь написать значение, которое уже существует (не было проблем с разбором узла при чтении). Мне также нужно использовать appendWellBalancedChunk, поскольку иногда я пишу HTML-элементы.perl libxml writing xliff in strings.xml
#!/usr/bin/env perl
#
# Create a simple XML document
#
use strict;
use warnings;
use XML::LibXML;
my $doc = XML::LibXML::Document->new('1.0', 'utf-8');
my $root = $doc->createElement("resources");
$root->setAttribute('xmlns:xliff' => 'urn:oasis:names:tc:xliff:document:1.2');
my $tag = $doc->createElement("string");
$tag->setAttribute('name'=>'no_messages');
my $string = '<xliff:g id="MILLISECONDS">%s</xliff:g>ms';
$tag->appendWellBalancedChunk($string);
$root->appendChild($tag);
$doc->setDocumentElement($root);
print $doc->toString();
Когда я запускаю это, я получаю следующее:
$ perl xliff.pl
namespace error : Namespace prefix xliff on g is not defined
<xliff:g id="MILLISECONDS">%s</xliff:g>ms
^
Благодарности
Это сработало. Можно ли добавить это к тегу ресурса, чтобы не добавлять его к каждому элементу, имеющему элемент XLIFF? Надеялся что-то, как это будет работать, но не повезло ... #/USR/бен/окр Perl # # не создать простой XML-документ # использовать строгий!; использовать предупреждения; использование XML :: LibXML; my $ doc = XML :: LibXML :: Document-> new ('1.0', 'utf-8'); my $ root = $ doc-> createElement ("resources"); $ root-> setAttribute ('xmlns: xliff' => 'urn: oasis: names: tc: xliff: document: 1.2'); ... – cdm
вы можете добавить объявление пространства имен в любой элемент. Его область действия - это поддерево, укорененное в этом элементе. Итак, да, это возможно. – collapsar
Кажется, не работает для меня. Я обновил код в исходном вопросе, чтобы вы могли точно видеть, что я делаю. Спасибо за вашу помощь! – cdm