ToolDeck

XML a YAML

Converte XML in formato YAML

Prova un esempio

Input XML

Output YAML

Esegue in locale · Sicuro per incollare segreti
Il YAML apparirà qui…

Cos'è la conversione da XML a YAML?

La conversione da XML a YAML trasforma i dati da Extensible Markup Language (XML) a YAML Ain't Markup Language (YAML). XML usa tag con parentesi angolari e attributi per descrivere dati gerarchici, mentre YAML rappresenta le stesse strutture tramite indentazione e coppie chiave-valore in testo semplice. Convertire XML in YAML online è un'operazione comune quando si migra la configurazione da sistemi basati su XML — come Java Spring, Maven o .NET — a piattaforme che preferiscono YAML, come Kubernetes, Ansible, GitHub Actions e Docker Compose.

I due formati differiscono nel modello dei dati. XML tratta tutto come testo di default e si affida a definizioni di schema (XSD, DTD) per l'applicazione dei tipi. YAML ha tipi nativi: stringhe, interi, float, booleani, null, sequenze (array) e mapping (oggetti). Durante la conversione, valori come "true", "5432" e "3.14" possono essere interpretati come tipi nativi YAML invece di rimanere stringhe. Un convertitore accurato racchiude questi valori tra virgolette per preservare la rappresentazione testuale originale della sorgente XML.

XML supporta anche costrutti privi di equivalente YAML: attributi, namespace, istruzioni di elaborazione, sezioni CDATA e commenti. La conversione deve scegliere una convenzione per rappresentare gli attributi (comunemente chiavi con prefisso underscore come _attr) e decidere se ignorare o appiattire il resto. Comprendere questi compromessi prima di convertire aiuta a scegliere lo strumento giusto, configurarlo correttamente e verificare che l'output YAML corrisponda all'intento originale dell'XML.

XML input
<server>
  <host>db.example.com</host>
  <port>5432</port>
  <credentials admin="true">
    <username>deploy</username>
    <password>s3cret</password>
  </credentials>
  <options>
    <option>ssl=true</option>
    <option>timeout=30</option>
  </options>
</server>
YAML output
server:
  host: db.example.com
  port: "5432"
  credentials:
    _admin: "true"
    username: deploy
    password: s3cret
  options:
    option:
      - ssl=true
      - timeout=30

Perché usare un convertitore XML in YAML online?

Scrivere uno script di conversione manuale richiede di gestire la mappatura degli attributi, il rilevamento degli array per gli elementi ripetuti e i casi limite della coercizione di tipo YAML. Un convertitore basato su browser gestisce tutto in un unico passaggio, permettendo di ispezionare l'output YAML e copiarlo direttamente nei file di configurazione.

Conversione istantanea
Incolla l'XML e ottieni l'output YAML in pochi millisecondi. Nessuna libreria da installare, nessun passaggio di build, nessuno script da mantenere.
🔒
Elaborazione privacy-first
La conversione viene eseguita interamente nel browser tramite JavaScript. I tuoi dati XML rimangono sulla tua macchina e non vengono mai inviati a nessun server.
🔀
Gestisce attributi e array
Gli attributi XML vengono mappati su chiavi con prefisso. Gli elementi fratelli ripetuti vengono raggruppati automaticamente in sequenze YAML, preservando le strutture di lista.
📋
Nessun account richiesto
Apri la pagina, incolla l'XML, copia il risultato YAML. Nessuna registrazione, nessuna chiave API, nessun limite di utilizzo.

Casi d'uso della conversione XML in YAML

Sviluppo frontend
Converti frammenti di configurazione XML da strumenti di build legacy (Ant, Maven) in YAML per pipeline CI moderne come GitHub Actions o GitLab CI che si aspettano file di configurazione YAML.
Ingegneria backend
Migra le definizioni dei bean XML di Spring al formato application.yml di Spring Boot, oppure converti le sezioni app.config di .NET in YAML per i deployment su container.
DevOps e infrastruttura
Trasforma i descrittori di deployment basati su XML (Tomcat server.xml, IIS web.config) in equivalenti YAML per manifest Kubernetes, chart Helm o playbook Ansible.
QA e testing
Converti fixture di test XML o configurazioni JUnit in YAML per framework di test che supportano sorgenti dati YAML, come pytest con fixture YAML o Robot Framework.
Ingegneria dei dati
Trasforma esportazioni di dati XML da sistemi enterprise (SAP, Oracle) in YAML per l'ingestione da parte di strumenti ETL come dbt o Airflow che usano configurazione e schemi basati su YAML.
Apprendimento e documentazione
Studenti e technical writer possono incollare esempi XML per vedere come elementi, attributi e annidamenti si traducono in indentazione, sequenze e mapping YAML.

Riferimento alla mappatura XML in YAML

XML e YAML hanno modelli di dati diversi. La tabella seguente mostra come ogni costrutto XML si mappa al proprio equivalente YAML. Gli attributi vengono tipicamente convertiti in chiavi con prefisso underscore, e gli elementi ripetuti diventano sequenze YAML. Alcuni costrutti come commenti e istruzioni di elaborazione non hanno rappresentazione YAML e vengono scartati durante la conversione.

Costrutto XMLEsempio XMLEquivalente YAML
Element<name>text</name>name: text
Nested elements<a><b>1</b></a>a:\n b: "1"
Attributes<el attr="v"/>el:\n _attr: v
Text + attributes<el a="1">text</el>el:\n _a: "1"\n _text: text
Repeated elements<r><i>1</i><i>2</i></r>r:\n i:\n - "1"\n - "2"
Empty element<el/>el: ""
CDATA<![CDATA[raw]]>Treated as plain text
Comments<!-- note -->Discarded (no YAML equivalent)
Namespacesxmlns:ns="uri"Prefix preserved or stripped
Boolean-like text<flag>true</flag>flag: "true" (quoted to stay string)

XML vs YAML: differenze nel modello dei dati

Convertire tra XML e YAML non è un semplice cambio di sintassi. I due formati hanno differenze strutturali fondamentali che influenzano la rappresentazione dei dati dopo la conversione.

Sistema di tipi
XML memorizza tutti i valori come stringhe di testo. YAML ha booleani, interi, float e null nativi. Durante la conversione, un valore come "true" o "3306" potrebbe essere reinterpretato come booleano o intero YAML a meno che il convertitore non lo racchiuda tra virgolette. Verifica sempre i valori sensibili al tipo nell'output.
Attributi vs chiavi
Gli elementi XML possono avere attributi insieme a elementi figlio e contenuto testuale. YAML ha solo mapping chiave-valore. Gli attributi devono essere convertiti in chiavi normali, tipicamente con un prefisso come _ o @ per distinguerli dagli elementi figlio.
Ordine e duplicati
XML preserva l'ordine del documento e consente elementi fratelli con lo stesso nome tag. I mapping YAML sono non ordinati per specifica (sebbene la maggior parte dei parser preservi l'ordine di inserimento), e le chiavi duplicate sono vietate in YAML 1.2. Gli elementi XML ripetuti devono diventare una sequenza YAML.

Esempi di codice

Di seguito trovi esempi funzionanti per convertire XML in YAML in JavaScript, Python, Go e da riga di comando. Ogni esempio gestisce elementi annidati, attributi e tag fratelli ripetuti.

JavaScript (Node.js)
import { parseStringPromise } from 'xml2js'
import YAML from 'yaml'

const xml = `
<config>
  <database host="localhost" port="5432">
    <name>mydb</name>
  </database>
  <features>
    <feature>auth</feature>
    <feature>logging</feature>
  </features>
</config>`

const obj = await parseStringPromise(xml, { explicitArray: false })
console.log(YAML.stringify(obj))
// → config:
// →   database:
// →     $:
// →       host: localhost
// →       port: "5432"
// →     name: mydb
// →   features:
// →     feature:
// →       - auth
// →       - logging
Python
import xmltodict
import yaml

xml = """
<server>
  <host>db.example.com</host>
  <port>5432</port>
  <replicas>
    <replica>node-1</replica>
    <replica>node-2</replica>
  </replicas>
</server>
"""

# Step 1: XML → Python dict
data = xmltodict.parse(xml)

# Step 2: Python dict → YAML
print(yaml.dump(data, default_flow_style=False))
# → server:
# →   host: db.example.com
# →   port: '5432'
# →   replicas:
# →     replica:
# →     - node-1
# →     - node-2

# With the standard library only (no xmltodict)
import xml.etree.ElementTree as ET

def elem_to_dict(elem):
    d = {}
    if elem.attrib:
        d.update({f"_{k}": v for k, v in elem.attrib.items()})
    for child in elem:
        val = elem_to_dict(child)
        if child.tag in d:
            if not isinstance(d[child.tag], list):
                d[child.tag] = [d[child.tag]]
            d[child.tag].append(val)
        else:
            d[child.tag] = val
    if elem.text and elem.text.strip():
        text = elem.text.strip()
        return text if not d else {**d, "_text": text}
    return d

root = ET.fromstring(xml)
print(yaml.dump({root.tag: elem_to_dict(root)}, default_flow_style=False))
CLI (xq + yq)
# xq is part of the yq package (pip install yq)
# It parses XML via xq and outputs JSON, then pipe to yq for YAML

echo '<config><host>localhost</host><port>8080</port></config>' | xq . | yq -y .
# → config:
# →   host: localhost
# →   port: "8080"

# Using xmlstarlet + yq (Go version: https://github.com/mikefarah/yq)
xmlstarlet sel -t -c '/' input.xml | yq -p=xml -o=yaml
# Reads XML from file and outputs YAML directly
Go
package main

import (
	"encoding/xml"
	"fmt"
	"strings"

	"gopkg.in/yaml.v3"
)

type Server struct {
	XMLName xml.Name `xml:"server"`
	Host    string   `xml:"host" yaml:"host"`
	Port    int      `xml:"port" yaml:"port"`
	Options []string `xml:"options>option" yaml:"options"`
}

func main() {
	data := `<server>
		<host>db.example.com</host>
		<port>5432</port>
		<options><option>ssl=true</option><option>timeout=30</option></options>
	</server>`

	var srv Server
	xml.NewDecoder(strings.NewReader(data)).Decode(&srv)

	out, _ := yaml.Marshal(srv)
	fmt.Println(string(out))
	// → host: db.example.com
	// → port: 5432
	// → options:
	// →   - ssl=true
	// →   - timeout=30
}

Domande frequenti

La conversione da XML a YAML è senza perdita di dati?
Non completamente. Attributi XML, commenti, istruzioni di elaborazione e sezioni CDATA non hanno un equivalente YAML nativo. Gli attributi possono essere preservati come chiavi con prefisso (_attr o @attr), ma commenti e istruzioni di elaborazione vengono scartati. Se hai bisogno di tornare all'XML originale, verifica che attributi e dichiarazioni di namespace siano sopravvissuti alla conversione.
Come vengono rappresentati gli attributi XML in YAML?
La maggior parte dei convertitori prefissa i nomi degli attributi con un underscore (_) o il simbolo @ per separarli dalle chiavi degli elementi figlio. Ad esempio, <server port="8080"> diventa server:\n _port: "8080". Il prefisso specifico dipende dalla libreria o dallo strumento utilizzato.
Cosa succede agli elementi XML ripetuti durante la conversione?
Quando lo stesso tag elemento appare più volte sotto un genitore comune, il convertitore li raggruppa in una sequenza YAML (lista). Ad esempio, due fratelli <item> diventano item:\n - value1\n - value2. Un singolo <item> rimane come valore scalare a meno che non sia attiva la modalità force-array.
Posso convertire YAML di nuovo in XML?
Sì, ma il risultato dipende da come la conversione originale ha gestito attributi e tipi. Se gli attributi erano stati preservati con chiavi prefissate, un convertitore da YAML a XML può ricostruirli. ToolDeck ha uno strumento YAML in XML per la direzione inversa. Tieni presente che i tipi nativi YAML (booleani, numeri) diventeranno stringhe di testo in XML.
Perché l'output YAML racchiude alcuni valori tra virgolette?
YAML ha tipi nativi: true/false sono booleani, i numeri senza virgolette diventano interi o float, e yes/no/on/off sono anch'essi booleani in YAML 1.1. Se il tuo XML contiene testo come "true" o "3306" che deve rimanere una stringa, il convertitore lo racchiude tra virgolette per evitare che i parser YAML reinterpretino il valore. Questo è il comportamento corretto, non un errore.
Come gestisco file XML di grandi dimensioni?
I convertitori basati su browser funzionano bene per file fino a qualche megabyte. Per file più grandi (10 MB+), usa un approccio in streaming: analizza l'XML con iterparse di Python o sax di Node.js, costruisci l'oggetto intermedio in modo incrementale, poi serializza in YAML. Anche strumenti come yq possono convertire XML in YAML direttamente dalla riga di comando senza caricare l'intero documento in memoria.
Qual è la differenza tra la conversione XML in YAML e quella XML in JSON?
Entrambe le conversioni affrontano la stessa sfida di mappare attributi XML ed elementi ripetuti in un modello di dati diverso. La differenza principale riguarda il formato di output. JSON è rigido (nessun commento, tipi espliciti, sintassi stretta), mentre YAML è un superset di JSON che aggiunge funzionalità orientate alla leggibilità umana: commenti, stringhe multiriga, ancore e alias. Scegli JSON quando il destinatario è un'API o un runtime JavaScript. Scegli YAML quando il destinatario è una persona che modifica file di configurazione.