使用Perl从DOM生成格式化XML

时间:2010-07-14 15:24:51

标签: xml perl

我编写了以下Perl脚本(如下所示)以创建简单的XML文件。生成的输出有效,但我对生成的XML源代码有特定的格式要求。

如何更改脚本以添加我想要的空白?

#!/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>

4 个答案:

答案 0 :(得分:5)

请参阅toString

的文档
print $doc->toString(1);

答案 1 :(得分:0)

您在示例1中列出的输出是正确的。标签和空格对XML没有任何意义;它们仅供人类使用,以便更容易看到结构。但是如果你仍然想做的是确保输出具有该结构,一种方法是用字符串(格式正确)而不是从零开始创建新的doc。

答案 2 :(得分:0)

我找到解决方案,我添加以下行

 my @lines = split /\n/, $doc->toString(1);
  shift @lines;


  foreach (@lines) {
  print "$_\n";
  }

现在我得到了

  <LEVEL1> 
    <LEVEL2> 
     <LEVEL3/> 
    </LEVEL2> 
  </LEVEL1> 

答案 3 :(得分:0)

这不是你问题的答案(你已经有了)。我只是想 指出

xmllint - 命令行XML工具(来自libxml)

可能有助于完成打印,编码,验证等几个xml任务。 在这种情况下:

perl yourscript | xmllint --format -