Maison  >  Article  >  développement back-end  >  Décompression des balises XML numérotées dans Go

Décompression des balises XML numérotées dans Go

PHPz
PHPzavant
2024-02-10 15:36:08911parcourir

在 Go 中解组编号的 XML 标签

l'éditeur php Banana vous présentera la méthode de démarshalisation des balises XML numérotées en langage Go. Le langage Go fournit la fonction xml.Unmarshal, qui peut désassembler les données XML dans une structure Go. Lors du désorganisation, nous pouvons utiliser des balises pour spécifier la relation de mappage entre les éléments XML et les champs de structure. En ajoutant `xml:"tagname"` à la balise du champ de structure, nous pouvons associer des balises spécifiques en XML au champ de structure pour réaliser des opérations de démarshalling automatiques. Cette méthode est simple et efficace, rendant le traitement des données XML en langage Go facile et agréable.

Contenu de la question

J'ai essayé beaucoup de structures pour essayer de désorganiser ce XML mais je n'arrive pas vraiment à comprendre :

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)
    }
}

Je n’arrive tout simplement pas à imprimer quoi que ce soit. Les champs dont j'ai réellement besoin sont la valeur attr de settingsn_register et le nom de la balise settingsn. Comment puis-je désorganiser correctement le fichier XML dans ces champs ? Je pense créer une fonction de désorganisation personnalisée, mais je ne trouve pas vraiment comment en créer une correctement. Je reçois uniquement le nom de la balise "paramètres" de ce fichier XML.

Solution

De xmlname 字段中删除 xml:",any" 标记(这会导致解码器尝试将额外的子元素映射到此字段),并将其解组为 settingcontainer 而不是 []settingcontainer En tant que document XML, il ne peut avoir qu'un seul élément racine. Exemple de travail ici : 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)
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer