0Pricing
Go Academy · บทเรียน

encoding/xml

ทำงานกับ XML

encoding/xml เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

การทำงานกับ XML

XML เป็นรูปแบบที่มีรายละเอียดมากและอิงแท็ก ซึ่งยังคงใช้กันทั่วไปในระบบเดิมและไฟล์การตั้งค่า แพ็กเกจ encoding/xml ของ Go ใช้แปลงและถอดรหัส XML โดยทำงานคล้ายแพ็กเกจ json

Marshal เป็น 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))
}

Unmarshal 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 ทำงานคล้าย API ของ json
  • แท็ก xml ใช้ตั้งชื่อองค์ประกอบ ส่วน ,attr ใช้สร้างแอตทริบิวต์
  • XMLName ใช้กำหนดราก และสไลซ์ใช้สร้างองค์ประกอบซ้ำ

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

บทเรียน “encoding/xml” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “encoding/xml” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “encoding/xml”

ทำงานกับ XML คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “encoding/xml” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทบทวน encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob และการเข้ารหัสไบนารี
← กลับไปที่ Go Academy