En Golang, nous avons souvent besoin de traiter des données XML. Cependant, nous pouvons parfois rencontrer des balises inconnues, ce qui entraîne certaines difficultés lors de la désagrégation des données XML. Alors, comment gérer ces balises inconnues dans Golang ? Dans cet article, l'éditeur PHP Xinyi présentera quelques méthodes de gestion des balises inconnues dans Golang pour vous aider à mieux désassembler les données XML. Que vous soyez débutant ou développeur expérimenté, cet article peut vous fournir des conseils et des conseils utiles. commençons!
Étant donné une chaîne brute XML de structure inconnue (à partir du résultat OCR), comment dois-je désorganiser la chaîne dans une structure/interface go traitable ?
Avec JSON, je peux faire quelque chose comme ça, alors existe-t-il une version XML de la réponse ?
Exemple
randomOcrXmlString := ` <container> <x></x> <y><z></z><y> <abc></abc> ... (many more random tags) </container>`
Mon intention réelle - insérer une balise avant la balise de fermeture </container>
</container>
标签之前插入一个标签
根据encoding/xml
Solution de contournement
Selon encodage/xml
documentation
type xmlResponse struct { Fields []byte `xml:",innerxml"` } func isXMLStringValid(str string) bool { // ref https://stackoverflow.com/a/62869933 decoder := xml.NewDecoder(strings.NewReader(str)) for { err := decoder.Decode(new(interface{})) if err != nil { return err == io.EOF } } } func parseRawXMLString(xmlStr string) (*xmlResponse, error) { if !isXMLStringValid(xmlStr) { return nil, errors.New(fmt.Sprintf("xml: construct: input is not valid xml: %s", xmlStr)) } var xmlResp = xmlResponse{} err := xml.Unmarshal([]byte(xmlStr), &xmlResp) if err != nil { log.Printf("xml: unmarshal: %s", err) return nil, err } return &xmlResp, nil }
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!