0Pricing
Go Academy · درس

encoding/xml

تعامَل مع XML

encoding/xml درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

التعامل مع XML

XML تنسيق مطوّل قائم على الوسوم، ولا يزال شائعًا في الأنظمة والإعدادات القديمة. وتُجري حزمة Go encoding/xml تسلسل XML وفكّه، بطريقة تحاكي حزمة json.

التسلسل إلى XML

تحوّل xml.Marshal قيمة Go إلى بايتات XML.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	b, _ := xml.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

وسوم XML

يتحكم وسم xml في أسماء العناصر، تمامًا كما تتحكم وسوم json في مفاتيح JSON.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{"Ann"})
	fmt.Println(string(b))
}

العنصر الجذري باستخدام XMLName

يحدد حقل من النوع xml.Name واسمه XMLName اسم العنصر الجذري.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	XMLName xml.Name "xml:\"user\""
	Name    string   "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{Name: "Ann"})
	fmt.Println(string(b))
}

السمات

أضيفوا ,attr إلى الوسم لعرض الحقل كسمة XML بدلًا من عنصر فرعي.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	XMLName xml.Name "xml:\"user\""
	ID      int      "xml:\"id,attr\""
	Name    string   "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{ID: 7, Name: "Ann"})
	fmt.Println(string(b))
}

فك تسلسل XML

تحلل xml.Unmarshal بايتات XML إلى مؤشر، مع مطابقة أسماء العناصر بالوسوم.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	var u User
	xml.Unmarshal([]byte("<User><name>Bob</name></User>"), &u)
	fmt.Println(u.Name)
}

العناصر المتداخلة

تُطابَق البنى المتداخلة مع عناصر XML متداخلة، فتُنشئ شجرة.

package main

import (
	"encoding/xml"
	"fmt"
)

type Address struct {
	City string "xml:\"city\""
}
type User struct {
	Name    string  "xml:\"name\""
	Address Address "xml:\"address\""
}

func main() {
	b, _ := xml.Marshal(User{"Ann", Address{"Rome"}})
	fmt.Println(string(b))
}

XML منسقة

تنسّق xml.MarshalIndent الإخراج باستخدام المسافات البادئة لتسهيل قراءته.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	b, _ := xml.MarshalIndent(User{"Ann"}, "", "  ")
	fmt.Println(string(b))
}

العناصر المتكررة

يصبح حقل الشريحة سلسلةً من عناصر XML المتكررة، عنصرًا لكل عنصر في الشريحة.

package main

import (
	"encoding/xml"
	"fmt"
)

type List struct {
	Items []string "xml:\"item\""
}

func main() {
	b, _ := xml.Marshal(List{Items: []string{"a", "b"}})
	fmt.Println(string(b))
}

مقارنة JSON وXML

واجهتا API متشابهتان: Marshal وUnmarshal وMarshalIndent ووسوم البنى. يضيف XML السمات ومفهوم XMLName للعنصر الجذري. فضّلوا JSON لواجهات API الجديدة، وXML للأنظمة القديمة.

إعلان الرأس

يحتوي الثابت xml.Header على سلسلة إعلان XML القياسية التي يمكنكم إضافتها إلى بداية الإخراج للحصول على مستندات مكتملة.

package main

import (
	"encoding/xml"
	"fmt"
)

func main() {
	fmt.Print(xml.Header)
}

تحقق سريع

ما الذي يفعله الخيار ,attr في وسم بنية xml؟

مراجعة

encoding/xml:

  • تحاكي xml.Marshal / Unmarshal واجهة json API
  • تسمّي وسوم xml العناصر؛ ويحوّل ,attr الحقول إلى سمات
  • يحدد XMLName العنصر الجذري؛ وتكرر الشرائح العناصر

الأسئلة الشائعة

هل درس «encoding/xml» مجاني؟

نعم — نص درس «encoding/xml» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «encoding/xml»؟

تعامَل مع XML تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «encoding/xml»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مراجعة encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob والترميز الثنائي
← العودة إلى Go Academy