ToolDeck

XML เป็น YAML

แปลง XML เป็นรูปแบบ YAML

ลองตัวอย่าง

อินพุต XML

เอาต์พุต YAML

ประมวลผลในเครื่อง · ปลอดภัยในการวางข้อมูลลับ
YAML จะปรากฏที่นี่…

การแปลง XML เป็น YAML คืออะไร?

การแปลง XML เป็น YAML คือกระบวนการเปลี่ยนข้อมูลจาก Extensible Markup Language (XML) ให้เป็น YAML Ain't Markup Language (YAML) XML ใช้แท็กวงเล็บมุมพร้อม attribute เพื่ออธิบายข้อมูลแบบลำดับชั้น ในขณะที่ YAML แสดงโครงสร้างเดียวกันผ่านการย่อหน้าและคู่ key-value แบบข้อความธรรมดา การแปลง XML เป็น YAML ออนไลน์เป็นงานทั่วไปเมื่อย้ายการกำหนดค่าจากระบบที่ใช้ XML เป็นหลัก เช่น Java Spring, Maven หรือ .NET ไปยังแพลตฟอร์มที่ต้องการ YAML เช่น Kubernetes, Ansible, GitHub Actions และ Docker Compose

ทั้งสองรูปแบบมีโมเดลข้อมูลที่แตกต่างกัน XML ถือว่าทุกอย่างเป็นข้อความโดยค่าเริ่มต้นและอาศัยคำนิยาม schema (XSD, DTD) สำหรับการบังคับประเภท YAML มีประเภทข้อมูลพื้นฐาน ได้แก่ string, integer, float, boolean, null, sequence (array) และ mapping (object) ระหว่างการแปลง ค่าเช่น "true", "5432" และ "3.14" อาจถูกตีความเป็นประเภทพื้นฐานของ YAML แทนที่จะคงเป็น string ตัวแปลงที่รอบคอบจะใส่เครื่องหมายคำพูดให้ค่าเหล่านี้เพื่อรักษาการแสดงข้อความดั้งเดิมจาก XML ต้นฉบับ

XML ยังรองรับโครงสร้างที่ไม่มีสิ่งเทียบเท่าใน YAML ได้แก่ attribute, namespace, processing instruction, CDATA section และ comment การแปลงต้องเลือกรูปแบบการแสดง attribute (โดยทั่วไปใช้ key ที่มีขีดล่างนำหน้า เช่น _attr) และตัดสินใจว่าจะทิ้งหรือรวมส่วนที่เหลือ การเข้าใจข้อดีข้อเสียเหล่านี้ก่อนแปลงช่วยให้คุณเลือกเครื่องมือที่เหมาะสม กำหนดค่าได้ถูกต้อง และตรวจสอบว่าผลลัพธ์ YAML ตรงกับเจตนาของ 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

ทำไมต้องใช้ตัวแปลง XML เป็น YAML ออนไลน์?

การเขียน script แปลงเองต้องจัดการกับการแมป attribute การตรวจจับ array สำหรับ element ที่ซ้ำกัน และ edge case ของการแปลงประเภทใน YAML ตัวแปลงบนเบราว์เซอร์จัดการทั้งหมดนั้นในขั้นตอนเดียว ทำให้คุณตรวจสอบผลลัพธ์ YAML และคัดลอกไปยังไฟล์กำหนดค่าได้โดยตรง

แปลงได้ทันที
วาง XML แล้วรับผลลัพธ์ YAML ภายในไม่กี่มิลลิวินาที ไม่ต้องติดตั้งไลบรารี ไม่มีขั้นตอน build ไม่มี script ที่ต้องดูแล
🔒
ประมวลผลโดยให้ความเป็นส่วนตัวก่อน
การแปลงทำงานทั้งหมดในเบราว์เซอร์ของคุณโดยใช้ JavaScript ข้อมูล XML ของคุณอยู่บนเครื่องของคุณและไม่เคยถูกส่งไปยังเซิร์ฟเวอร์
🔀
รองรับ attribute และ array
XML attribute ถูกแมปไปยัง key ที่มีคำนำหน้า Sibling element ที่ซ้ำกันจะถูกจัดกลุ่มเป็น YAML sequence โดยอัตโนมัติ เพื่อรักษาโครงสร้าง list
📋
ไม่ต้องสมัครบัญชี
เปิดหน้า วาง XML และคัดลอกผลลัพธ์ YAML ไม่ต้องลงทะเบียน ไม่ต้องใช้ API key ไม่มีข้อจำกัดการใช้งาน

กรณีการใช้งานการแปลง XML เป็น YAML

การพัฒนา frontend
แปลง XML configuration snippet จาก build tool รุ่นเก่า (Ant, Maven) เป็น YAML สำหรับ CI pipeline สมัยใหม่เช่น GitHub Actions หรือ GitLab CI ที่ต้องการไฟล์กำหนดค่า YAML
วิศวกรรม backend
ย้าย Spring XML bean definition ไปยังรูปแบบ application.yml ของ Spring Boot หรือแปลง .NET app.config section เป็น YAML สำหรับการ deploy บน container
DevOps และโครงสร้างพื้นฐาน
แปลง deployment descriptor ที่ใช้ XML (Tomcat server.xml, IIS web.config) เป็น YAML ที่เทียบเท่าสำหรับ Kubernetes manifest, Helm chart หรือ Ansible playbook
QA และการทดสอบ
แปลง XML test fixture หรือการกำหนดค่า JUnit เป็น YAML สำหรับ test framework ที่รองรับแหล่งข้อมูล YAML เช่น pytest ที่มี YAML fixture หรือ Robot Framework
วิศวกรรมข้อมูล
แปลงข้อมูลส่งออก XML จากระบบองค์กร (SAP, Oracle) เป็น YAML สำหรับการนำเข้าโดย ETL tool เช่น dbt หรือ Airflow ที่ใช้การกำหนดค่าและ schema แบบ YAML
การเรียนรู้และเอกสาร
นักศึกษาและนักเขียนเชิงเทคนิคสามารถวาง XML ตัวอย่างเพื่อดูว่า element, attribute และการซ้อนกันแปลไปเป็นการย่อหน้า, sequence และ mapping ของ YAML อย่างไร

ตารางอ้างอิงการแมป XML เป็น YAML

XML และ YAML มีโมเดลข้อมูลที่แตกต่างกัน ตารางด้านล่างแสดงว่าโครงสร้าง XML แต่ละแบบแมปไปยัง YAML ที่เทียบเท่าได้อย่างไร Attribute มักถูกแปลงเป็น key ที่มีขีดล่างนำหน้า และ element ที่ซ้ำกันจะกลายเป็น YAML sequence โครงสร้างบางอย่างเช่น comment และ processing instruction ไม่มีการแสดงผลใน YAML และถูกทิ้งระหว่างการแปลง

โครงสร้าง XMLตัวอย่าง XMLYAML ที่เทียบเท่า
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 กับ YAML: ความแตกต่างของโมเดลข้อมูล

การแปลงระหว่าง XML และ YAML ไม่ใช่แค่การสลับ syntax เท่านั้น รูปแบบทั้งสองมีความแตกต่างเชิงโครงสร้างพื้นฐานที่ส่งผลต่อการแสดงข้อมูลหลังการแปลง

ระบบประเภทข้อมูล
XML เก็บค่าทั้งหมดเป็น string XML YAML มี boolean, integer, float และ null เป็นประเภทพื้นฐาน ระหว่างการแปลง ค่าเช่น "true" หรือ "3306" อาจถูกตีความใหม่เป็น boolean หรือ integer ของ YAML เว้นแต่ตัวแปลงจะใส่เครื่องหมายคำพูด ควรตรวจสอบค่าที่ขึ้นอยู่กับประเภทในผลลัพธ์เสมอ
Attribute กับ key
XML element สามารถมี attribute ควบคู่กับ child element และเนื้อหาข้อความ YAML มีเฉพาะ key-value mapping Attribute ต้องถูกแปลงเป็น key ปกติ โดยทั่วไปใช้คำนำหน้าเช่น _ หรือ @ เพื่อแยกออกจาก child element
ลำดับและข้อมูลซ้ำ
XML รักษาลำดับของเอกสารและอนุญาตให้มี sibling element ที่มีชื่อแท็กเดียวกัน YAML mapping ไม่มีลำดับตามข้อกำหนด (แม้ parser ส่วนใหญ่จะรักษาลำดับการแทรก) และห้ามใช้ key ซ้ำใน YAML 1.2 XML element ที่ซ้ำกันต้องกลายเป็น YAML sequence

ตัวอย่างโค้ด

ด้านล่างคือตัวอย่างที่ใช้งานได้จริงสำหรับการแปลง XML เป็น YAML ใน JavaScript, Python, Go และ command line แต่ละตัวอย่างรองรับ element ที่ซ้อนกัน, attribute และ sibling tag ที่ซ้ำกัน

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
}

คำถามที่พบบ่อย

การแปลง XML เป็น YAML ไม่สูญเสียข้อมูลหรือ?
ไม่สมบูรณ์แบบ XML attribute, comment, processing instruction และ CDATA section ไม่มีสิ่งเทียบเท่าพื้นฐานใน YAML Attribute สามารถเก็บไว้เป็น key ที่มีคำนำหน้า (_attr หรือ @attr) แต่ comment และ processing instruction จะถูกทิ้ง หากต้องการแปลงกลับเป็น XML ให้ตรวจสอบว่า attribute และการประกาศ namespace ผ่านการแปลงมาครบถ้วน
XML attribute แสดงผลใน YAML อย่างไร?
ตัวแปลงส่วนใหญ่เติมขีดล่าง (_) หรือสัญลักษณ์ @ นำหน้าชื่อ attribute เพื่อแยกออกจาก key ของ child element ตัวอย่างเช่น <server port="8080"> จะกลายเป็น server:\n _port: "8080" คำนำหน้าที่เฉพาะเจาะจงขึ้นอยู่กับไลบรารีหรือเครื่องมือที่ใช้
XML element ที่ซ้ำกันเกิดอะไรขึ้นระหว่างการแปลง?
เมื่อแท็ก element เดิมปรากฏหลายครั้งใต้ parent เดียวกัน ตัวแปลงจะจัดกลุ่มเป็น YAML sequence (list) ตัวอย่างเช่น <item> sibling สองตัวจะกลายเป็น item:\n - value1\n - value2 <item> เดี่ยวจะคงเป็น scalar value เว้นแต่เปิดใช้ force-array mode
สามารถแปลง YAML กลับเป็น XML ได้หรือ?
ได้ แต่ผลลัพธ์ขึ้นอยู่กับวิธีที่การแปลงครั้งแรกจัดการ attribute และประเภทข้อมูล หาก attribute ถูกเก็บไว้ด้วย key ที่มีคำนำหน้า ตัวแปลง YAML เป็น XML สามารถสร้างขึ้นใหม่ได้ ToolDeck มีเครื่องมือ YAML to XML สำหรับทิศทางย้อนกลับ โปรดทราบว่าประเภทพื้นฐานของ YAML (boolean, ตัวเลข) จะกลายเป็น string ใน XML
ทำไมผลลัพธ์ YAML จึงใส่เครื่องหมายคำพูดบางค่า?
YAML มีประเภทข้อมูลพื้นฐาน: true/false เป็น boolean ตัวเลขเปล่าๆ กลายเป็น integer หรือ float และ yes/no/on/off ก็เป็น boolean ใน YAML 1.1 เช่นกัน หาก XML ของคุณมีข้อความเช่น "true" หรือ "3306" ที่ควรคงเป็น string ตัวแปลงจะใส่เครื่องหมายคำพูดเพื่อป้องกัน YAML parser ตีความค่าใหม่ นี่คือพฤติกรรมที่ถูกต้อง ไม่ใช่ข้อผิดพลาด
จัดการไฟล์ XML ขนาดใหญ่ได้อย่างไร?
ตัวแปลงบนเบราว์เซอร์ทำงานได้ดีกับไฟล์ขนาดถึงสองสามเมกะไบต์ สำหรับไฟล์ขนาดใหญ่ (10MB+) ให้ใช้แนวทาง streaming: แยกวิเคราะห์ XML ด้วย iterparse ของ Python หรือ sax ของ Node.js สร้าง object ตัวกลางทีละส่วน จากนั้น serialize เป็น YAML เครื่องมืออย่าง yq ยังแปลง XML เป็น YAML ได้โดยตรงจาก command line โดยไม่ต้องโหลดเอกสารทั้งหมดเข้าหน่วยความจำ
ความแตกต่างระหว่างการแปลง XML เป็น YAML กับ XML เป็น JSON คืออะไร?
ทั้งสองการแปลงเผชิญกับความท้าทายเดียวกันในการแมป XML attribute และ element ที่ซ้ำกันไปยังโมเดลข้อมูลที่แตกต่าง ความแตกต่างหลักอยู่ที่รูปแบบผลลัพธ์ JSON เข้มงวด (ไม่มี comment ประเภทข้อมูลชัดเจน syntax เคร่งครัด) ในขณะที่ YAML เป็น superset ของ JSON ที่เพิ่มคุณสมบัติที่เป็นมิตรกับมนุษย์ ได้แก่ comment, multi-line string, anchor และ alias เลือก JSON เมื่อผู้ใช้งานปลายทางเป็น API หรือ JavaScript runtime เลือก YAML เมื่อผู้ใช้งานปลายทางเป็นมนุษย์ที่แก้ไขไฟล์กำหนดค่า