2015-02-13 6 views
0

У меня возникли трудности с записью в файл 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 
         ^

Благодарности

ответ

1

Добавление объявления пространства имен в элемент xml сделает ваш код без ошибок:

my $string = '<xliff:g xmlns:xliff="urn:whatever" id="MILLISECONDS">%s</xliff:g>ms'; 
+0

Это сработало. Можно ли добавить это к тегу ресурса, чтобы не добавлять его к каждому элементу, имеющему элемент 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

+0

вы можете добавить объявление пространства имен в любой элемент. Его область действия - это поддерево, укорененное в этом элементе. Итак, да, это возможно. – collapsar

+0

Кажется, не работает для меня. Я обновил код в исходном вопросе, чтобы вы могли точно видеть, что я делаю. Спасибо за вашу помощь! – cdm

0

Вы получаете эту ошибку, потому что вы не имеете пространства имен XML, определенные для <xliff:g id="MILLISECONDS">%s</xliff:g>ms