Генерация отформатированного XML из DOM с использованием Perl - PullRequest
1 голос
/ 14 июля 2010

Я написал следующий скрипт на 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 ]

5 голосов
/ 14 июля 2010

См. Документацию для toString

print $doc->toString(1);
0 голосов
/ 26 ноября 2014

Это не ответ на ваши вопросы (у вас уже есть один).Я просто хочу отметить, что

xmllint - инструмент командной строки XML (из libxml)

может помочь в нескольких задачах XML, таких как симпатичная печать, кодирование, проверка.В этом случае:

perl yourscript | xmllint --format -
0 голосов
/ 14 июля 2010

Нахожу решение, добавляю следующие строки

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


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

и теперь я получаю

  <LEVEL1> 
    <LEVEL2> 
     <LEVEL3/> 
    </LEVEL2> 
  </LEVEL1> 
0 голосов
/ 14 июля 2010

Ваш вывод в том виде, как вы перечислили его в примере 1, верен. Вкладки и пробелы ничего не значат для XML; они предназначены только для людей, чтобы было легче увидеть структуру. Но если вы все еще хотите сделать, это убедиться, что выходные данные имеют такую ​​структуру, один из способов - создать новый документ из строки (в правильном формате), а не из ничего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...