Heim > Artikel > Backend-Entwicklung > Unmarshaling nummerierter XML-Tags in Go
Der PHP-Editor Banana führt Sie in die Methode zum Unmarshaling nummerierter XML-Tags in der Go-Sprache ein. Die Go-Sprache stellt die Funktion xml.Unmarshal bereit, mit der XML-Daten in eine Go-Struktur entmarshmiert werden können. Beim Unmarshalling können wir Tags verwenden, um die Zuordnungsbeziehung zwischen XML-Elementen und Strukturfeldern anzugeben. Durch Hinzufügen von „xml:“tagname“ zum Tag des Strukturfelds können wir bestimmte Tags in XML mit dem Strukturfeld verknüpfen, um automatische Unmarshalling-Vorgänge zu erreichen. Diese Methode ist einfach und effizient und macht die Verarbeitung von XML-Daten in der Go-Sprache einfach und angenehm.
Ich habe viele Strukturen ausprobiert, um diese XML-Datei zu entmarshalieren, aber ich komme nicht wirklich dahinter:
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) } }
Ich schaffe es einfach nicht, etwas zu drucken. Die Felder, die ich tatsächlich benötige, sind das Wertattr von „settingn_register“ und der Tagname „settingn“. Wie kann ich die XML-Datei korrekt in diese Felder entpacken? Ich denke darüber nach, eine benutzerdefinierte Unmarshalling-Funktion zu erstellen, kann aber nicht wirklich herausfinden, wie ich eine richtig erstellen kann. Ich erhalte nur den Tag-Namen „settings“ aus dieser XML-Datei.
Von xmlname
字段中删除 xml:",any"
标记(这会导致解码器尝试将额外的子元素映射到此字段),并将其解组为 settingcontainer
而不是 []settingcontainer
Da ein XML-Dokument nur ein Stammelement haben kann. Arbeitsbeispiel hier: 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) }
Das obige ist der detaillierte Inhalt vonUnmarshaling nummerierter XML-Tags in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!