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 มีเครื่องมือที่แข็งแกร่งเพื่อให้งานสำเร็จ ตามปกติแล้ว การเลือกข้อมูลรูปแบบขึ้นอยู่กับข้อกำหนดเฉพาะของแอปพลิเคชันและสภาพแวดล้อม