ToolDeck

YAMLからXMLコンバーター

YAMLをXML形式に変換

サンプルを試す

YAML入力

XML出力

ローカルで実行 · シークレットの貼り付けも安全
XMLはここに表示されます…
こちらもどうぞ:YAMLからJSONコンバーター

YAMLからXMLへの変換とは?

YAMLからXMLへの変換は、YAML(YAML Ain't Markup Language)で記述されたデータをXML(Extensible Markup Language)に変換する処理です。YAMLはインデントと最小限の句読点で構造化データを表現しますが、XMLは明示的な階層を持つ開始タグと終了タグを使用します。XMLを受け取るシステムがYAMLで作成されたデータを扱う必要がある場合、この変換は日常的な作業となります。

YAMLは人間が読みやすいように設計されました。Kubernetes、Ansible、Docker Compose、GitHub Actionsといったツールの設定ファイルはYAMLで書かれており、コンパクトで手動編集が容易です。W3C XML 1.0仕様で定義されたXMLは、数十年にわたってエンタープライズシステム、SOAPウェブサービス、ドキュメント中心のワークフローにおけるデフォルトのデータ交換形式として使われてきました。YAMLで書かれた設定がXMLベースのパイプラインに入力される必要がある場合、変換が必要になります。

YAMLとXMLの対応は一対一ではありません。YAMLは真偽値、整数、浮動小数点数、nullといったデータ型をネイティブにサポートしますが、XMLはスキーマ(XSDまたはDTD)が外部で型を定義しない限り、すべてのコンテンツをテキストとして扱います。YAMLのシーケンス(リスト)にはXMLの直接的な対応表現がなく、繰り返し要素として表現する必要があります。これらの違いを理解しておくことで、出力を予測し予期しない結果を避けることができます。

このYAMLからXMLコンバーターを使う理由

YAMLを手動でXMLに書き直すのは、特に深くネストされた構造では手間がかかりミスが生じやすい作業です。このコンバーターは構造変換を即座に処理します。

即時変換
YAMLを貼り付けると、すぐに整形されたXML出力が得られます。一回限りの変換のためにスクリプトを書いたりCLIツールをインストールしたりする必要はありません。
🔒
プライバシー優先の処理
変換処理はすべてブラウザ内で実行されます。サーバーアドレス、認証情報、インフラの詳細を含むことが多いYAMLデータがマシンの外に送信されることは一切ありません。
📋
アカウント不要
サインアップ、ログイン、メールアドレスの提供なしにコンバーターを使用できます。ページを開いてすぐに変換を始められます。
🌐
ネスト構造に対応
深くネストされたYAMLマッピング、シーケンス、混在する型、複数行文字列をサポートします。出力は適切なXMLインデントで階層構造を保持します。

YAMLからXML変換の使用例

フロントエンド開発
XMLパーサー、XSLTトランスフォーメーション、またはAPIからXMLレスポンスを期待するコンポーネントのテスト用に、YAMLのモックデータをXML形式に変換します。
バックエンド連携
Spring XML設定、Maven POMファイル、SOAPエンドポイントを使用するレガシーJavaサービスと連携する際に、YAML設定をXMLに変換します。
DevOpsとCI/CD
KubernetesやAnsibleのYAMLマニフェストを、Jenkinsパイプライン設定や特定の監視システムなどXML入力を必要とするツール向けに変換します。
QAとテスト
YAML定義からXMLテストフィクスチャを生成します。YAMLはテストデータとして保守しやすく、テスト時にXMLに変換することでフィクスチャの可読性を保てます。
データエンジニアリング
XMLを処理するパイプライン向けに、YAML形式のETL設定やスキーマ定義をXMLに変換します。ヘルスケア(HL7)、金融(FpML)、政府データシステムでよく使われます。
学習とプロトタイピング
学生や初心者がYAMLを貼り付けて等価なXML構造を並べて確認することで、階層データがフォーマット間でどのようにマッピングされるかの理解が深まります。

YAMLからXMLへの型マッピング早見表

YAMLのデータ型はXMLに直接マッピングされません。この表は各YAML構造がXMLの等価表現にどのように変換されるかを示しています。これらの規則を理解することで出力を予測し、予期しない結果のトラブルシューティングに役立ちます。

YAMLの型YAMLの例XML出力
Mapping (key: value){ name: Alice }<name>Alice</name>
Sequence (- item)- apple\n- banana<item>apple</item><item>banana</item>
Nested mappinguser:\n name: Alice<user><name>Alice</name></user>
Scalar (string)greeting: hello world<greeting>hello world</greeting>
Scalar (number)count: 42<count>42</count>
Scalar (boolean)active: true<active>true</active>
Nullvalue: null<value/>
Multiline stringbio: |\n Line one\n Line two<bio>Line one\nLine two</bio>

YAMLとXML:フォーマットの違い

YAMLとXMLは同じ問題(構造化データの表現)をトレードオフが異なる方法で解決しています。どちらが優れているとは一概には言えず、データを誰が・何が消費するかによって適切な選択が変わります。

YAML
空白区切り、終了タグなし。ネイティブ型(bool、int、float、null)をサポート。#でコメント記述。設定ファイルや手動編集に適したコンパクトな形式。PyYAML、js-yaml、gopkg.in/yamlなどのライブラリでパース可能。
XML
明示的な開始・終了タグのペアによるタグベース構造。デフォルトではすべての値はテキスト。型の指定にはスキーマ(XSD)が必要。属性、名前空間、混在コンテンツ、処理命令をサポート。主要言語の標準ライブラリでパース可能。
機能YAMLXML
構文インデントベースタグベース(&lt;tag&gt;...&lt;/tag&gt;)
データ型ネイティブ(string、int、bool、null、float)テキストのみ(スキーマで型を追加)
コメント# インラインコメント<!-- ブロックコメント -->
属性ネイティブサポートなしあり(&lt;tag attr="val"&gt;)
名前空間非サポートあり(xmlns:prefix)
ファイルサイズ小さい(終了タグなし)大きい(冗長なタグ)

コード例

各言語・環境でYAMLをXMLにプログラムで変換する方法:

JavaScript (Node.js)
import { parseDocument } from 'yaml'
import { js2xml } from 'xml-js'

const yamlStr = `
server:
  host: localhost
  port: 8080
  ssl: true
`

const data = parseDocument(yamlStr).toJSON()
const xml = js2xml({ root: data }, { compact: true, spaces: 2 })
console.log(xml)
// → <root>
// →   <server>
// →     <host>localhost</host>
// →     <port>8080</port>
// →     <ssl>true</ssl>
// →   </server>
// → </root>
Python
import yaml
import xml.etree.ElementTree as ET

yaml_str = """
database:
  host: db.example.com
  port: 5432
  credentials:
    user: admin
    password: secret
"""

data = yaml.safe_load(yaml_str)

def dict_to_xml(tag, d):
    elem = ET.Element(tag)
    for key, val in d.items():
        child = ET.SubElement(elem, key)
        if isinstance(val, dict):
            child.extend(dict_to_xml(key, val))
            elem.remove(child)
            elem.append(dict_to_xml(key, val))
        else:
            child.text = str(val)
    return elem

root = dict_to_xml('root', data)
ET.indent(root, space='  ')
print(ET.tostring(root, encoding='unicode'))
# → <root>
# →   <database>
# →     <host>db.example.com</host>
# →     <port>5432</port>
# →     ...
# →   </database>
# → </root>
Go
package main

import (
    "encoding/xml"
    "fmt"
    "gopkg.in/yaml.v3"
)

type Server struct {
    XMLName xml.Name `xml:"server"`
    Host    string   `yaml:"host" xml:"host"`
    Port    int      `yaml:"port" xml:"port"`
    SSL     bool     `yaml:"ssl"  xml:"ssl"`
}

func main() {
    yamlData := []byte("host: localhost\nport: 8080\nssl: true")

    var s Server
    yaml.Unmarshal(yamlData, &s)

    xmlBytes, _ := xml.MarshalIndent(s, "", "  ")
    fmt.Println(xml.Header + string(xmlBytes))
    // → <?xml version="1.0" encoding="UTF-8"?>
    // → <server>
    // →   <host>localhost</host>
    // →   <port>8080</port>
    // →   <ssl>true</ssl>
    // → </server>
}
CLI (yq + xq)
# Using yq (YAML processor) with xq (XML wrapper around jq)
# Install: pip install yq

# Convert YAML file to XML
yq -x . config.yaml
# → <host>localhost</host><port>8080</port>

# Pipe inline YAML through conversion
echo "name: Alice" | yq -x .
# → <name>Alice</name>

よくある質問

YAMLのシーケンスはXMLで表現できますか?
はい。ただし、XMLにはネイティブのリスト型がありません。YAMLのシーケンスは通常、同じタグ名を持つ繰り返しのXML要素に変換されます。例えば、"items"キー配下のYAMLリストは複数の&lt;item&gt;子要素になります。一部のコンバーターは明確にするために親の&lt;items&gt;要素でラップします。
変換時にYAMLのコメントはどうなりますか?
YAMLのコメント(#で始まる行)は変換時に破棄されます。ほとんどのYAMLパーサーはデータ構造を構築する際にコメントを除去するため、XML出力には含まれません。コメントを保持する必要がある場合は、Pythonのruamel.yamlのようにコメントを保持できるYAMLパーサーが必要です。
YAMLのアンカーとエイリアスはどのように処理されますか?
YAMLのアンカー(&name)とエイリアス(*name)は変換前に解決されます。パーサーはエイリアスを完全な値に展開するため、結果のXMLにはアンカー参照のない完全なデータが含まれます。アンカーを繰り返しの回避に使用していた場合、XML出力はYAML入力より大きくなる可能性があります。
変換は可逆ですか(XMLをYAMLに戻せますか)?
部分的には可能です。XMLをYAMLに変換できますが、結果は元のYAMLと完全には一致しない場合があります。XML属性はYAMLの等価表現がなく、通常は特殊なキー(例:@attribute)として表現されます。XMLはすべてをテキストとして扱うため型情報も失われ、元のYAMLにあった数値や真偽値は往復変換後に文字列になります。
YAMLからXMLに変換する際、XML属性はどのように扱えばよいですか?
YAMLには属性のネイティブな概念がありません。一般的な慣例として、キーに@プレフィックスを付けることで子要素ではなくXML属性にすることを示します。例えば、マッピング配下の"@id: 42"は&lt;element id="42"&gt;になります。この慣例はxml-jsやxmltodicのようなライブラリで使用されています。
このツールが処理できる最大YAMLファイルサイズは?
コンバーターはブラウザで実行されるため、上限はデバイスの使用可能なメモリによります。数メガバイトまでのファイルは最新のハードウェアで問題なく変換できます。非常に大きなファイル(50MB以上)の場合は、ストリーミングとメモリをより効率的に扱えるyqのようなCLIツールやPyYAMLとlxmlを使ったPythonスクリプトを使用してください。
YAMLから無効なXML出力が生成されるのはなぜですか?
最も多い原因は、有効なXML要素名でないYAMLキーです。XML要素名は数字で始めることができず、スペースや特殊文字のほとんどを含められません。"2nd-item"や"my key"のようなキーは無効なXMLを生成します。問題のあるキーを修正するか、名前を自動的にサニタイズするコンバーター(スペースをアンダースコアに置換し、数字始まりの名前にアンダースコアを付加するものなど)を使用してください。