티스토리 뷰

go

Go xml 처리

까오기 2024. 7. 16. 12:36

Go에서 XML 처리를 위해 encoding/xml 패키지를 사용합니다. 이 패키지는 XML 데이터를 Go 객체로 디코딩(언마셜)하고, Go 객체를 XML 형식으로 인코딩(마셜)하는 기능을 제공합니다.

XML 데이터 디코딩 (Unmarshal)

xml.Unmarshal 함수를 사용하여 XML 데이터를 Go 객체로 디코딩할 수 있습니다. 예를 들어, XML 문자열을 구조체에 바인딩하는 방법은 다음과 같습니다.

package main

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

// Person 구조체 정의
type Person struct {
    XMLName xml.Name `xml:"person"`
    Name    string   `xml:"name"`
    Age     int      `xml:"age"`
}

func main() {
    // XML 문자열
    xmlString := `<person><name>Alice</name><age>30</age></person>`

    // 구조체 초기화
    var person Person

    // XML 문자열을 구조체로 디코딩
    err := xml.Unmarshal([]byte(xmlString), &person)
    if err != nil {
        log.Fatalf("Error decoding XML: %v", err)
    }

    // 결과 출력
    fmt.Printf("Name: %s, Age: %d\n", person.Name, person.Age)
}

XML 데이터 인코딩 (Marshal)

xml.Marshal 함수를 사용하여 Go 객체를 XML 형식으로 인코딩할 수 있습니다. 예를 들어, 구조체를 XML 문자열로 변환하는 방법은 다음과 같습니다.

package main

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

// Person 구조체 정의
type Person struct {
    XMLName xml.Name `xml:"person"`
    Name    string   `xml:"name"`
    Age     int      `xml:"age"`
}

func main() {
    // 구조체 초기화
    person := Person{
        Name: "Bob",
        Age:  25,
    }

    // 구조체를 XML 문자열로 인코딩
    xmlData, err := xml.Marshal(person)
    if err != nil {
        log.Fatalf("Error encoding XML: %v", err)
    }

    // XML 문자열 출력
    fmt.Println(string(xmlData))
}

XML 문자열을 객체에 바인딩 및 객체를 XML로 변환하는 전체 예제

package main

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

// Person 구조체 정의
type Person struct {
    XMLName xml.Name `xml:"person"`
    Name    string   `xml:"name"`
    Age     int      `xml:"age"`
}

func main() {
    // XML 문자열
    xmlString := `<person><name>Charlie</name><age>28</age></person>`

    // 구조체 초기화
    var person Person

    // XML 문자열을 구조체로 디코딩 (Unmarshal)
    err := xml.Unmarshal([]byte(xmlString), &person)
    if err != nil {
        log.Fatalf("Error decoding XML: %v", err)
    }

    // 디코딩 결과 출력
    fmt.Printf("Decoded Struct - Name: %s, Age: %d\n", person.Name, person.Age)

    // 구조체를 XML 문자열로 인코딩 (Marshal)
    xmlData, err := xml.Marshal(person)
    if err != nil {
        log.Fatalf("Error encoding XML: %v", err)
    }

    // 인코딩 결과 출력
    fmt.Println("Encoded XML:", string(xmlData))
}

실행 결과

Decoded Struct - Name: Charlie, Age: 28
Encoded XML: <person><name>Charlie</name><age>28</age></person>

코드 설명

  1. 구조체 정의: Person 구조체는 XML 데이터의 형식을 정의합니다. 구조체 필드에는 xml 태그를 사용하여 XML 요소와 매핑합니다.
  2. XML 문자열: 예제에서 사용되는 XML 문자열입니다.
  3. 구조체 초기화: XML 데이터를 디코딩할 구조체를 선언하고 초기화합니다.
  4. Unmarshal: xml.Unmarshal 함수를 사용하여 XML 문자열을 구조체로 디코딩합니다. XML 데이터가 바이트 슬라이스 형식으로 제공되므로 []byte(xmlString)로 변환합니다.
  5. 디코딩 결과 출력: 디코딩된 구조체 데이터를 출력합니다.
  6. Marshal: xml.Marshal 함수를 사용하여 구조체를 XML 문자열로 인코딩합니다. 이 함수는 구조체를 바이트 슬라이스 형식의 XML 데이터로 변환합니다.
  7. 인코딩 결과 출력: 인코딩된 XML 문자열을 출력합니다.

이 예제에서는 XML 데이터를 구조체에 바인딩하고, 구조체를 XML 문자열로 변환하는 기본적인 방법을 다룹니다. 이를 통해 XML 데이터와 Go 객체 간의 변환 작업을 쉽게 처리할 수 있습니다.

 

출처 : chatGPT

'go' 카테고리의 다른 글

Go 삭제 후 Homebrew로 설치하기(go kit 설치)  (0) 2024.07.17
GO sql db 처리  (0) 2024.07.16
Go Json 처리  (0) 2024.07.16
Go Http Post 호출  (0) 2024.07.16
Go Http GET 요청  (0) 2024.07.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함