Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Perl从DOM生成格式化XML_Xml_Perl - Fatal编程技术网

使用Perl从DOM生成格式化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);

为了创建简单的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);

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无效。