Rumah > pembangunan bahagian belakang > Golang > Membongkar teg XML bernombor dalam Go

Membongkar teg XML bernombor dalam Go

PHPz
Lepaskan: 2024-02-10 15:36:08
ke hadapan
949 orang telah melayarinya

在 Go 中解组编号的 XML 标签

editor php Banana akan memperkenalkan anda kepada kaedah unmarshaling teg XML bernombor dalam bahasa Go. Bahasa Go menyediakan fungsi xml.Unmarshal, yang boleh menyahmarshal data XML ke dalam struktur Go. Apabila unmarshalling, kita boleh menggunakan tag untuk menentukan hubungan pemetaan antara elemen XML dan medan struktur. Dengan menambahkan `xml:"tag"` pada teg medan struktur, kami boleh mengaitkan teg tertentu dalam XML dengan medan struktur untuk mencapai operasi unmarshalling automatik. Kaedah ini mudah dan cekap, menjadikan pemprosesan data XML dalam bahasa Go mudah dan menyeronokkan.

Kandungan soalan

Saya telah mencuba banyak struktur untuk mencuba dan membongkar xml ini tetapi saya tidak dapat memahaminya:

package main

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

type SettingContainer struct {
    XMLName  xml.Name  `xml:"Settings"`
    Settings []Setting `xml:",any"`
}

type Setting struct {
    XMLName          xml.Name          `xml:",any"`
    SettingRegisters []SettingRegister `xml:",any"`
}

type SettingRegister struct {
    XMLName xml.Name `xml:",any"`
    Value   string   `xml:"value,attr"`
}

func main() {
    var xmlData = bytes.NewBufferString(`
    <Settings>
        <Setting0>
            <Setting0_register value="0x20" />
            <Setting0ArbitraryName value="0x0" />
        </Setting0>
        <Setting1>
            <Setting1_register value="0x60" />
            <Setting1WhateverEnable value="0x0" />
        </Setting1>
        <Setting2>
            <Setting2_register value="0x80" />
            <Setting2blahblah value="0x1" />
        </Setting2>
        <Setting4>
            <Setting4_register value="0x2fffff8" />
            <Setting4ThisCanBeAnything value="0x0" />
        </Setting4>
    </Settings>`)

    var s []SettingContainer
    xml.Unmarshal(xmlData.Bytes(), &s)

    for _, i := range s {
        fmt.Println(i)
    }
}
Salin selepas log masuk

Saya tidak boleh mendapatkannya untuk mencetak apa-apa. Medan yang sebenarnya saya perlukan ialah attr nilai settingn_register dan nama tag settingn. Bagaimanakah saya boleh menyahmarshal xml ke dalam medan ini dengan betul? Saya sedang berfikir untuk membuat fungsi unmarshalling tersuai, tetapi saya tidak dapat mencari cara untuk membuatnya dengan betul. Saya hanya mendapat nama teg "tetapan" daripada xml ini.

Penyelesaian

Dari xmlname 字段中删除 xml:",any" 标记(这会导致解码器尝试将额外的子元素映射到此字段),并将其解组为 settingcontainer 而不是 []settingcontainer Sebagai dokumen xml hanya boleh mempunyai satu elemen akar. Contoh kerja di sini: https://www.php.cn/link/d2949eb6aaa490c835219e945ff37dad

type SettingContainer struct {
    XMLName  xml.Name  `xml:"Settings"`
    Settings []Setting `xml:",any"`
}

type Setting struct {
    XMLName          xml.Name
    SettingRegisters []SettingRegister `xml:",any"`
}

type SettingRegister struct {
    XMLName xml.Name
    Value   string `xml:"value,attr"`
}

func main() {
    var xmlData = bytes.NewBufferString(`...`)

    var s SettingContainer
    xml.Unmarshal(xmlData.Bytes(), &s)

    fmt.Println(s)
}
Salin selepas log masuk

Atas ialah kandungan terperinci Membongkar teg XML bernombor dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan