perl libxml 在 strings.xml 中写入 xliff
perl libxml writing xliff in strings.xml
我在使用 LibXML 写入包含 XLIFF 元素的 strings.xml 文件时遇到困难。请注意,我正在尝试写入一个已经存在的值(在读取时解析节点没有问题)。我有时也需要使用 appendWellBalancedChunk 来写 HTML 个元素。
#!/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:g id="MILLISECONDS">%s</xliff:g>ms
定义的 XML 名称空间
向 xml 元素添加命名空间声明将使您的代码 运行 没有错误:
my $string = '<xliff:g xmlns:xliff="urn:whatever" id="MILLISECONDS">%s</xliff:g>ms';
我在使用 LibXML 写入包含 XLIFF 元素的 strings.xml 文件时遇到困难。请注意,我正在尝试写入一个已经存在的值(在读取时解析节点没有问题)。我有时也需要使用 appendWellBalancedChunk 来写 HTML 个元素。
#!/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:g id="MILLISECONDS">%s</xliff:g>ms
向 xml 元素添加命名空间声明将使您的代码 运行 没有错误:
my $string = '<xliff:g xmlns:xliff="urn:whatever" id="MILLISECONDS">%s</xliff:g>ms';