2010-07-14 4 views
1

Я написал следующий скрипт Perl (ниже), чтобы создать простой XML-файл. Сгенерированный вывод действителен, но у меня есть особые требования к форматированию для сгенерированного исходного кода XML.Создание форматированного XML из DOM с использованием Perl

Как я могу изменить свой сценарий, чтобы добавить пробел, который я желаю?

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

ответ

0

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

+0

моя цель изменить сценарий для того, чтобы сделать XML в качестве примера 2 Я понимаю, что пример 1 является правильным, но как я могу манипулировать XML как пример 2? Yael – yael

+0

@yael: Извините, вопрос, как изначально написанный, звучал так, как будто вы считали, что XML недействителен. – MJB

0

Я нашел решение, я добавить следующие строки

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


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

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

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

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

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

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

perl yourscript | xmllint --format - 
Смежные вопросы