ToolDeck

YAML إلى XML

تحويل YAML إلى XML

جرب مثالاً

إدخال YAML

إخراج XML

يعمل محليًا · آمن للصق الأسرار
سيظهر XML هنا…
جرب أيضاً:YAML إلى JSON

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

تحويل YAML إلى XML هو عملية تحويل البيانات المكتوبة بلغة YAML (اختصار لـ YAML Ain't Markup Language) إلى لغة XML (لغة الترميز الموسّعة). يعتمد YAML على المسافات البادئة والترميز المحدود لتمثيل البيانات الهيكلية، بينما يستخدم XML وسوم الفتح والإغلاق مع تسلسل هرمي صريح. يُعدّ التحويل بين التنسيقين مهمة شائعة عندما تحتاج الأنظمة التي تستهلك XML إلى استقبال بيانات أُعدّت أصلًا بصيغة YAML.

صُمِّم YAML للقراءة البشرية. ملفات إعداد أدوات مثل Kubernetes وAnsible وDocker Compose وGitHub Actions تُكتب بـYAML لأنه مضغوط وسهل التحرير يدويًا. أما XML، المُحدَّد بمواصفة W3C XML 1.0، فقد ظلّ تنسيق تبادل البيانات الافتراضي في الأنظمة المؤسسية وخدمات SOAP الويب وسير العمل الموثّقة لعقود. وعندما يجب أن تُغذّي إعدادات YAML خطوطَ أنابيب تعتمد على XML، يصبح التحويل ضروريًا.

لا يوجد تطابق واحد لواحد بين YAML وXML. يدعم YAML أنواع بيانات أصلية كالقيم المنطقية والأعداد الصحيحة والعشرية والقيم الفارغة، بينما يعامل XML كل المحتوى كنص ما لم يُحدِّد مخطط (XSD أو DTD) الأنواع خارجيًا. كذلك لا يوجد في XML ما يقابل متتاليات YAML (القوائم) مباشرةً، وتُمثَّل كعناصر مكررة. فهم هذه الفوارق يساعدك على توقّع المخرجات وتجنّب المفاجآت.

لماذا تستخدم محوّل YAML إلى XML هذا؟

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

تحويل فوري
الصق YAML واحصل على مخرجات XML منسّقة في الحال. لا حاجة لكتابة سكربت أو تثبيت أداة سطر أوامر لتحويلات أحادية.
🔒
معالجة محلية تحافظ على خصوصيتك
تجري عملية التحويل بالكامل في متصفحك. بيانات YAML الخاصة بك — التي كثيرًا ما تحتوي على عناوين خوادم وبيانات اعتماد وتفاصيل بنية تحتية — لا تغادر جهازك أبدًا.
📋
لا حساب مطلوب
استخدم المحوّل دون تسجيل أو تسجيل دخول أو تقديم بريد إلكتروني. افتح الصفحة وابدأ التحويل.
🌐
يعالج البنى المتداخلة
يدعم تعيينات YAML المتداخلة بعمق والمتتاليات والأنواع المختلطة والسلاسل متعددة الأسطر. يحافظ المخرج على التسلسل الهرمي مع مسافات XML البادئة الصحيحة.

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

تطوير الواجهة الأمامية
تحويل بيانات YAML التجريبية إلى صيغة XML لاختبار محللات XML وتحويلات XSLT أو المكوّنات التي تتوقع استجابات XML من واجهات برمجية.
تكامل الواجهة الخلفية
تحويل إعدادات YAML إلى XML عند التكامل مع خدمات Java القديمة التي تستخدم إعدادات Spring XML أو ملفات Maven POM أو نقاط نهاية SOAP.
DevOps والتسليم المستمر
تحويل بيانات Kubernetes أو Ansible بصيغة YAML إلى XML للأدوات التي تتطلب إدخال XML، كإعدادات خطوط أنابيب Jenkins أو بعض أنظمة المراقبة.
ضمان الجودة والاختبار
إنشاء تجهيزات اختبار XML من تعريفات YAML. صيانة YAML كبيانات اختبار أيسر، وتحويلها إلى XML وقت الاختبار يحافظ على قابلية قراءة التجهيزات.
هندسة البيانات
تحويل إعدادات ETL بصيغة YAML أو تعريفات المخطط إلى XML لخطوط أنابيب تستهلك 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 مكررة بالاسم ذاته. مثلًا، قائمة YAML تحت مفتاح "items" تصبح عناصر &lt;item&gt; فرعية متعددة. تُغلّفها بعض المحوّلات في عنصر أب &lt;items&gt; للوضوح.
ماذا يحدث لتعليقات YAML أثناء التحويل؟
تُهمَل تعليقات YAML (الأسطر التي تبدأ بـ#) أثناء التحويل. تحذف معظم محللات YAML التعليقات عند بناء هيكل البيانات، فلا تكون متاحة لمخرجات XML. إذا احتجت إلى الحفاظ على التعليقات، فستحتاج إلى محلل YAML يحتفظ بها، كـruamel.yaml في Python.
كيف تُعالَج مراسي YAML وأسماؤه المستعارة؟
تُحلَّل مراسي YAML (&name) وأسماؤه المستعارة (*name) قبل التحويل. يوسّع المحلل الأسماء المستعارة إلى قيمها الكاملة، فتحتوي مخرجات XML على البيانات الكاملة بلا أي إشارات إلى المراسي. هذا يعني أن مخرجات XML قد تكون أكبر من إدخال YAML إذا استُخدمت المراسي لتجنّب التكرار.
هل التحويل قابل للعكس (من XML إلى YAML)؟
جزئيًا. يمكنك تحويل XML إلى YAML، لكن النتيجة قد لا تطابق YAML الأصلي تمامًا. لا يوجد في YAML ما يقابل خصائص XML مباشرةً، وتُمثَّل عادةً كمفاتيح خاصة (مثل @attribute). كذلك تضيع معلومات الأنواع لأن XML يعامل كل شيء كنص، فالأعداد والقيم المنطقية في YAML الأصلي تصبح سلاسل نصية بعد رحلة الذهاب والإياب.
كيف أتعامل مع خصائص XML عند التحويل من YAML؟
لا يمتلك YAML مفهوم الخصائص أصلًا. الاتفاقية الشائعة هي إضافة بادئة @ للمفاتيح للإشارة إلى أنها يجب أن تصبح خصائص XML بدلًا من عناصر فرعية. مثلًا، "@id: 42" تحت تعيين ينتج &lt;element id="42"&gt;. تستخدم هذه الاتفاقية مكتبات كـxml-js وxmltodict.
ما أقصى حجم لملف YAML يمكن لهذه الأداة معالجته؟
يعمل المحوّل في متصفحك، لذا يعتمد الحد على الذاكرة المتاحة لجهازك. تُحوَّل الملفات حتى بضعة ميغابايت دون مشاكل على الأجهزة الحديثة. للملفات الكبيرة جدًا (50 ميغابايت فأكثر)، استخدم أداة سطر أوامر كـyq أو سكربت Python مع PyYAML وlxml، اللذَين يتعاملان مع البث والذاكرة بكفاءة أعلى.
لماذا ينتج YAML الخاص بي مخرجات XML غير صالحة؟
السبب الأكثر شيوعًا هو مفاتيح YAML غير الصالحة كأسماء عناصر XML. لا يجوز أن تبدأ أسماء عناصر XML برقم أو تحتوي على مسافات أو تستخدم معظم الأحرف الخاصة. مفاتيح مثل "2nd-item" أو "my key" ستُنتج XML غير صالح. أعِد تسمية المفاتيح المخالفة أو استخدم محوّلًا يصحّح الأسماء تلقائيًا (مثل استبدال المسافات بشرطات سفلية وإضافة شرطة سفلية في البداية للأسماء التي تبدأ برقم).