2012-08-08 13 views
6

Esistono moduli in CPAN per convertire gli elenchi YAML in XML ben formato?Come posso convertire YAML in XML in Perl?

Da YAML:

- fruits: 
    - apple 
    - pear 
    - orange 

Per XML:

<fruits> 
    <apple /> 
    <pear /> 
    <orange /> 
</fruits> 
+1

L'idea migliore sarebbe probabilmente quella di leggere i dati utilizzando un parser YAML e inviarli con un formattatore XML. Ti consiglierei di dare un'occhiata a XML :: Simple. –

+0

@ Csongor Fagwal Ho pensato di farlo. Ho solo paura che invece di fare il compito a mano finisco per scrivere ancora un altro modulo CPAN. Comunque, come programmatore Perl, la pigrizia è una virtù. Così dice Larry. Un modulo CPAN sarebbe ideale. ;-) – GeneQ

+0

Penso che sia possibile mappare un documento YAML a un documento XML in diversi modi, quindi unire un parser YAML a un creatore XML è fondamentalmente ciò che si vuole fare. In realtà sono due righe di codice. Non ha davvero senso creare un modulo convertitore YAML-XML, IMHO. È come creare un convertitore da PNG a JPG separato, un convertitore da PNG a GIF, ecc. Invece di usare solo ImageMagick :) –

risposta

1

No non c'è modulo CPAN per questo. ci sono CPAN modules to read YAML e ci sono modules to write XML. Il trasferimento dei dati sarà perl struttura dei dati.

La domanda è su quale schema deve essere inserito il tuo XML, e ci sono molti moduli XML diversi, quindi non c'è neanche una risposta perfetta.

+0

È vero, non esiste una risposta perfetta, ma qui è disponibile un esempio funzionante (vedi sopra). – HoldOffHunger

2
use strictures; 
use YAML "Load"; 
use XML::Simple "XMLout"; 

my $data = Load(do{ local $/; <DATA> }); 
print XMLout($data, XMLDecl => 1); 

__DATA__ 
--- 
- fruits: 
    - apple 
    - pear 
    - orange 

Ci potrebbe essere una combinazione di opzioni per XMLout che vi DWYW e potrebbe essere necessario per Jigger la struttura dei dati per ottenere il nome di root che si desidera, ecc Si noterà dalla vertiginosa serie di opzioni che serializzare e scomporre l'XML in altri formati di dati è decisamente non semplice. Lettura: XML::Simple e YAML.

+1

Questo dovrebbe essere contrassegnato come la risposta corretta. – HoldOffHunger

0

CPAN può aiutarti con Util::XML_YAML_PERL.

use Util::XML_YAML_Perl; 

my $obj = Util::XML_YAML_PERL->new(); 

my $yaml_text = <<UNTIL_HERE; 
- fruits: 
    - apple 
    - pear 
    - orange 
UNTIL_HERE 

print $obj->yaml_to_xml($yaml_text); 

# <fruits> 
# <apple /> 
# <pear /> 
# <orange /> 
# </fruits> 

Nota: Questo modulo ha un problema tecnico la sua documentazione, e potrebbe utilizzare una patch: Util :: XML_YAML_Perl è il pacchetto corretto, non 'XML :: YAML_PERL' come nella sua documentazione pod.