使用Perl从DOM生成格式化XML
为了创建简单的XML文件,我编写了以下Perl脚本(如下)。生成的输出是有效的,但我对生成的XML源代码有特定的格式要求 如何更改脚本以添加所需的空白使用Perl从DOM生成格式化XML,xml,perl,Xml,Perl,为了创建简单的XML文件,我编写了以下Perl脚本(如下)。生成的输出是有效的,但我对生成的XML源代码有特定的格式要求 如何更改脚本以添加所需的空白 #!/usr/bin/perl use warnings; use XML::LibXML; my $doc = XML::LibXML::Document->new; my $root = $doc->createElement('LEVEL1'); $doc->setDocumentElement($root);
#!/usr/bin/perl
use warnings;
use XML::LibXML;
my $doc = XML::LibXML::Document->new;
my $root = $doc->createElement('LEVEL1');
$doc->setDocumentElement($root);
my $system = $doc->createElement('LEVEL2');
$root->appendChild($system);
my $install = $doc->createElement('LEVEL3');
$system->appendChild($install);
print $doc->toString;
脚本的输出:
<?xml version="1.0"?>
<LEVEL1><LEVEL2><LEVEL3/></LEVEL2></LEVEL1>
期望输出:
<?xml version="1.0"?>
<LEVEL1>
<LEVEL2>
<LEVEL3/>
</LEVEL2>
</LEVEL1>
示例1中列出的输出是正确的。制表符和空格对XML来说毫无意义;它们的存在只是为了让人类更容易看到结构。但是,如果您仍然希望确保输出具有该结构,一种方法是使用字符串(正确的格式)而不是从无到有创建新文档。您在示例1中列出的输出是正确的。制表符和空格对XML来说毫无意义;它们的存在只是为了让人类更容易看到结构。但是,如果您仍然希望确保输出具有该结构,一种方法是使用字符串(正确的格式)而不是从无到有创建新文档。有关详细信息,请参阅文档
有关详细信息,请参阅文档
我找到了解决方案,我添加了以下几行
my @lines = split /\n/, $doc->toString(1);
shift @lines;
foreach (@lines) {
print "$_\n";
}
现在我明白了
<LEVEL1>
<LEVEL2>
<LEVEL3/>
</LEVEL2>
</LEVEL1>
我找到了解决方案,我添加了以下几行
my @lines = split /\n/, $doc->toString(1);
shift @lines;
foreach (@lines) {
print "$_\n";
}
现在我明白了
<LEVEL1>
<LEVEL2>
<LEVEL3/>
</LEVEL2>
</LEVEL1>
这不是您问题的答案(您已经有了答案)。我只是想 指出 xmllint-命令行XML工具(来自libxml) 可以帮助完成一些xml任务,如打印、编码和验证。 在这种情况下:
perl yourscript | xmllint --format -
这不是你问题的答案(你已经有了答案)。我只是想 指出 xmllint-命令行XML工具(来自libxml) 可以帮助完成一些xml任务,如打印、编码和验证。 在这种情况下:
perl yourscript | xmllint --format -
我的目标是更改脚本,以使XML成为示例2。我知道示例1是正确的,但如何才能像示例2那样操作XML?Yael@yael:抱歉--最初编写的问题听起来像是您认为XML无效。我的目标是更改脚本,以使XML成为示例2。我知道示例1是正确的,但如何操作示例2中的XML?Yael@yael:抱歉--最初编写的问题听起来像是您认为XML无效。