ToolDeck

XML إلى YAML

تحويل XML إلى صيغة YAML

جرب مثالاً

إدخال XML

إخراج YAML

يعمل محليًا · آمن للصق الأسرار
سيظهر YAML هنا…

ما هو تحويل XML إلى YAML؟

تحويل XML إلى YAML هو عملية تحويل البيانات من لغة الترميز الموسّعة (XML) إلى لغة YAML. يعتمد XML على وسوم زاوية مع خصائص لوصف البيانات الهرمية، بينما يمثّل YAML البنى نفسها من خلال المسافات البادئة وأزواج مفتاح-قيمة بصيغة نصية مقروءة. يُعدّ تحويل XML إلى YAML عبر الإنترنت مهمة شائعة عند الانتقال من الأنظمة التي تعتمد XML اعتمادًا كبيرًا كـJava Spring وMaven و.NET إلى منصات تفضّل YAML مثل Kubernetes وAnsible وGitHub Actions وDocker Compose.

يختلف التنسيقان في نموذجَي بياناتهما. يعامل XML كل شيء كنص افتراضيًا ويعتمد على تعريفات المخطط (XSD وDTD) لإنفاذ الأنواع. أما YAML فيمتلك أنواعًا أصلية: سلاسل نصية وأعداد صحيحة وأعداد عشرية وقيم منطقية وقيم فارغة ومتتاليات (مصفوفات) وتعيينات (كائنات). أثناء التحويل، يمكن تفسير قيم مثل "true" و"5432" و"3.14" كأنواع YAML أصلية بدلًا من إبقائها سلاسل نصية. لذا يُضمّن المحوّل الجيد هذه القيم بين اقتباسات للحفاظ على طابعها النصي الأصلي.

يدعم XML أيضًا تراكيب لا نظير لها في YAML: الخصائص ومساحات الأسماء وتعليمات المعالجة وأقسام CDATA والتعليقات. يجب على المحوّل اختيار اتفاقية لتمثيل الخصائص (تُستخدم عادةً مفاتيح بادئة بشرطة سفلية مثل _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 الإلكتروني؟

كتابة سكربت تحويل يدويًا تعني التعامل مع ربط الخصائص واكتشاف المصفوفات للعناصر المتكررة وحالات التحويل الدقيقة لأنواع YAML. يعالج المحوّل المستند إلى المتصفح كل ذلك في خطوة واحدة، مما يتيح لك فحص مخرجات YAML ونسخها مباشرةً في ملفات الإعدادات.

تحويل فوري
الصق XML واحصل على مخرجات YAML في الحال. لا حاجة لتثبيت مكتبة أو خطوة بناء أو سكربت للصيانة.
🔒
معالجة تُقدّم الخصوصية أولًا
تجري عملية التحويل بالكامل في متصفحك باستخدام JavaScript. تبقى بيانات XML الخاصة بك على جهازك ولا تُرسَل أبدًا إلى أي خادم.
🔀
يعالج الخصائص والمصفوفات
تُربط خصائص XML بمفاتيح تحمل بادئة مميّزة. تُجمَّع العناصر الشقيقة المتكررة في متتاليات YAML تلقائيًا مع الحفاظ على بنى القوائم.
📋
لا حساب مطلوب
افتح الصفحة، والصق XML الخاص بك، وانسخ نتيجة YAML. لا تسجيل، ولا مفتاح API، ولا حدود للاستخدام.

حالات استخدام تحويل XML إلى YAML

تطوير الواجهة الأمامية
تحويل مقاطع إعداد XML من أدوات البناء القديمة (Ant وMaven) إلى YAML لخطوط أنابيب CI الحديثة كـGitHub Actions وGitLab CI التي تتوقع ملفات إعداد بصيغة YAML.
هندسة الواجهة الخلفية
نقل تعريفات Spring XML beans إلى صيغة application.yml في Spring Boot، أو تحويل أقسام app.config في .NET إلى YAML لنشر الحاويات.
DevOps والبنية التحتية
تحويل واصفات النشر المستندة إلى XML (مثل server.xml في Tomcat وweb.config في IIS) إلى ما يقابلها في YAML لبيانات Kubernetes وHelmcharts وكتيّبات Ansible.
ضمان الجودة والاختبار
تحويل تجهيزات اختبار XML أو إعدادات JUnit إلى YAML لأطر اختبار تدعم مصادر بيانات YAML مثل pytest مع تجهيزات YAML أو Robot Framework.
هندسة البيانات
تحويل تصدير بيانات XML من الأنظمة المؤسسية (SAP وOracle) إلى YAML لاستيعابها في أدوات ETL كـdbt وAirflow التي تستخدم إعدادات ومخططات مستندة إلى YAML.
التعلّم والتوثيق
يستطيع الطلاب والكتّاب التقنيون لصق نماذج XML لمشاهدة كيفية ترجمة العناصر والخصائص والتداخل إلى مسافات YAML البادئة والمتتاليات والتعيينات.

مرجع ربط XML بـYAML

يمتلك XML وYAML نموذجَي بيانات مختلفَين. يوضح الجدول أدناه كيف يرتبط كل تركيب XML بما يقابله في YAML. تُحوَّل الخصائص عادةً إلى مفاتيح بادئة بشرطة سفلية، وتصبح العناصر المتكررة متتاليات YAML. بعض التراكيب كالتعليقات وتعليمات المعالجة لا تمتلك تمثيلًا في YAML وتُهمَل أثناء التحويل.

تركيب XMLمثال XMLما يقابله في 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 مقابل YAML: الفوارق في نموذج البيانات

التحويل بين XML وYAML ليس مجرد استبدال صياغة. يمتلك التنسيقان فوارق بنيوية جوهرية تؤثر في طريقة تمثيل البيانات بعد التحويل.

نظام الأنواع
يخزّن XML جميع القيم كسلاسل نصية. يمتلك YAML قيمًا منطقية وأعدادًا صحيحة وعشرية وقيمًا فارغة أصلية. أثناء التحويل، قد تُعاد تفسير قيمة مثل "true" أو "3306" كقيمة منطقية أو عدد صحيح في YAML ما لم يُقيّدها المحوّل بين اقتباسات. تحقق دائمًا من القيم الحساسة للنوع في المخرجات.
الخصائص مقابل المفاتيح
يمكن لعناصر XML حمل خصائص إلى جانب العناصر الفرعية والمحتوى النصي. لا يمتلك YAML سوى تعيينات مفتاح-قيمة. يجب تحويل الخصائص إلى مفاتيح عادية، عادةً مع بادئة كـ_ أو @ للتمييز بينها وبين العناصر الفرعية.
الترتيب والتكرار
يحافظ XML على ترتيب المستند ويسمح بعناصر شقيقة تحمل الاسم ذاته. تعيينات YAML غير مرتبة وفق المواصفة (وإن كانت معظم المحللات تحافظ على ترتيب الإدراج)، والمفاتيح المكررة محظورة في YAML 1.2. يجب أن تصبح عناصر XML المتكررة متتالية YAML.

أمثلة على الكود

فيما يلي أمثلة عملية لتحويل XML إلى YAML في JavaScript وPython وGo وسطر الأوامر. يتعامل كل مثال مع العناصر المتداخلة والخصائص والوسوم الشقيقة المتكررة.

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 يحافظ على البيانات كاملة دون فقدان؟
ليس تمامًا. لا يوجد في YAML ما يقابل خصائص XML مباشرةً، ولا ما يعادل التعليقات وتعليمات المعالجة وأقسام CDATA. يمكن الحفاظ على الخصائص كمفاتيح بادئة بـ_attr أو @attr، لكن التعليقات وتعليمات المعالجة تُهمَل. إذا كنت بحاجة إلى رحلة ذهاب وإياب قابلة للعكس إلى XML، تحقق من الحفاظ على الخصائص وتصريحات مساحات الأسماء.
كيف تُمثَّل خصائص XML في YAML؟
تُضيف معظم المحوّلات بادئة شرطة سفلية (_) أو @ لأسماء الخصائص للتمييز بينها وبين مفاتيح العناصر الفرعية. مثلًا، <server port="8080"> تصبح server:\n _port: "8080". تعتمد البادئة المحددة على المكتبة أو الأداة المستخدمة.
ماذا يحدث للعناصر XML المتكررة أثناء التحويل؟
عندما يظهر الوسم ذاته عدة مرات تحت عنصر أب واحد، يجمّعها المحوّل في متتالية YAML (قائمة). مثلًا، عنصران شقيقان من نوع item يصبحان item:\n - value1\n - value2. يبقى عنصر item الواحد كقيمة بسيطة ما لم يكن وضع force-array مفعّلًا.
هل يمكنني تحويل YAML مجددًا إلى XML؟
نعم، لكن النتيجة تعتمد على كيفية تعامل التحويل الأصلي مع الخصائص والأنواع. إذا حُفظت الخصائص بمفاتيح بادئة، يستطيع محوّل YAML إلى XML إعادة بنائها. تتوفر في ToolDeck أداة YAML إلى XML للاتجاه العكسي. انتبه إلى أن أنواع YAML الأصلية (قيم منطقية وأرقام) ستصبح سلاسل نصية في XML.
لماذا تُقيَّد بعض القيم بين اقتباسات في مخرجات YAML؟
يمتلك YAML أنواعًا أصلية: true/false قيم منطقية، والأرقام المجرّدة تصبح أعدادًا صحيحة أو عشرية، وyes/no/on/off قيم منطقية أيضًا في YAML 1.1. إذا كان XML يحتوي على نص مثل "true" أو "3306" ينبغي أن يبقى سلسلة نصية، يُقيّد المحوّل هذه القيم لمنع محللات YAML من إعادة تفسيرها. هذا سلوك صحيح وليس خطأ.
كيف أتعامل مع ملفات XML الكبيرة؟
تعمل المحوّلات المستندة إلى المتصفح بكفاءة مع الملفات التي تبلغ بضعة ميجابايت. بالنسبة للملفات الأكبر (10 ميجابايت فأكثر)، استخدم نهج البث: حلّل XML باستخدام iterparse في Python أو sax في Node.js، وابنِ الكائن الوسيط تدريجيًا، ثم تسلسَل إلى YAML. تستطيع أداة yq أيضًا تحويل XML إلى YAML مباشرةً من سطر الأوامر دون تحميل المستند كاملًا في الذاكرة.
ما الفرق بين تحويل XML إلى YAML وتحويل XML إلى JSON؟
يواجه كلا التحويلين التحدي ذاته المتمثل في ربط خصائص XML والعناصر المتكررة بنموذج بيانات مختلف. الفرق الرئيسي في صيغة المخرجات. JSON صارم (بلا تعليقات، أنواع صريحة، صياغة محددة)، بينما YAML مجموعة شاملة تعلو على JSON مع ميزات تُسهّل قراءته من قِبل البشر: تعليقات وسلاسل متعددة الأسطر ومرتكزات وأسماء بديلة. اختر JSON حين يكون المستهلك واجهة برمجية أو بيئة تشغيل JavaScript. اختر YAML حين يكون المستهلك شخصًا يحرّر ملفات إعداد.