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

วิธีการ:

การแยกวิเคราะห์ XML ใน Go

เพื่อแยกวิเคราะห์ XML ใน Go คุณใช้แพ็คเกจ encoding/xml แพ็คเกจนี้ให้เครื่องมือที่จำเป็นในการ unmarshal (แยกวิเคราะห์) XML ให้เป็น structs ของ Go ตัวอย่างเช่น พิจารณาข้อมูล XML ต่อไปนี้ที่แทนหนังสือ:

<book id="123">
    <title>Learning Go</title>
    <author>John Doe</author>
    <pages>359</pages>
</book>

เพื่อแยกวิเคราะห์สิ่งนี้ ให้กำหนด struct ที่สะท้อนโครงสร้าง XML:

package main

import (
    "encoding/xml"
    "fmt"
    "os"
)

type Book struct {
    XMLName xml.Name `xml:"book"`
    ID      string   `xml:"id,attr"`
    Title   string   `xml:"title"`
    Author  string   `xml:"author"`
    Pages   int      `xml:"pages"`
}

func main() {
    data := []byte(`
<book id="123">
    <title>Learning Go</title>
    <author>John Doe</author>
    <pages>359</pages>
</book>
`)

    var book Book
    err := xml.Unmarshal(data, &book)
    if err != nil {
        panic(err)
    }

    fmt.Printf("Book: %+v\n", book)
}

ผลลัพธ์:

Book: {XMLName:{Space: Local:book} ID:123 Title:Learning Go Author:John Doe Pages:359}

การสร้าง XML ใน Go

เพื่อสร้างเอกสาร XML จากโครงสร้างข้อมูลของ Go คุณอีกครั้งใช้แพ็คเกจ encoding/xml คราวนี้คุณ marshal structs ของ Go เป็น XML โดยพิจารณา struct Book ก่อนหน้านี้:

package main

import (
    "encoding/xml"
    "fmt"
    "os"
)

func main() {
    book := &Book{
        ID:     "123",
        Title:  "Learning Go",
        Author: "John Doe",
        Pages:  359,
    }

    output, err := xml.MarshalIndent(book, "", "    ")
    if err != nil {
        panic(err)
    }

    fmt.Println(xml.Header + string(output))
}

ผลลัพธ์:

<?xml version="1.0" encoding="UTF-8"?>
<book id="123">
    <title>Learning Go</title>
    <author>John Doe</author>
    <pages>359</pages>
</book>

ด้านลึก

ความแออัดและความซับซ้อนของ XML ทำให้ JSON และรูปแบบอื่น ๆ ได้รับความนิยมมากขึ้นสำหรับแอปพลิเคชันหลายๆ อย่าง อย่างไรก็ตาม ความสามารถของ XML ในการแสดงข้อมูลเชิงลำดับชั้นที่ซับซ้อนและการใช้งานที่แพร่หลายในระบบเก่าและโดเมนเฉพาะ (เช่น บริการ SOAP) ยังคงรับประกันความเกี่ยวข้องของมัน

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

สำหรับแอปพลิเคชันสมัยใหม่ส่วนใหญ่ ทางเลือกเช่น JSON นั้นง่ายและมีประสิทธิภาพมากขึ้น อย่างไรก็ตาม เมื่อทำงานในบริบทที่ต้องการ XML—เนื่องจากระบบเก่า มาตรฐานอุตสาหกรรมเฉพาะ หรือความต้องการการแสดงข้อมูลที่ซับซ้อน—ไลบรารีมาตรฐานของ Go มีเครื่องมือที่แข็งแกร่งเพื่อให้งานสำเร็จ ตามปกติแล้ว การเลือกข้อมูลรูปแบบขึ้นอยู่กับข้อกำหนดเฉพาะของแอปพลิเคชันและสภาพแวดล้อม