Maison > développement back-end > Golang > Décomposer XML avec des balises inconnues dans Golang ?

Décomposer XML avec des balises inconnues dans Golang ?

WBOY
Libérer: 2024-02-08 22:45:09
avant
1200 Les gens l'ont consulté

在 golang 中使用一些未知标签解组 XML?

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!

Contenu de la question

É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>`
Copier après la connexion

Mon intention réelle - insérer une balise avant la balise de fermeture </container> </container> 标签之前插入一个标签

解决方法

根据encoding/xmlSolution de contournement

Selon encodage/xml documentation

, 🎜 🎜Donc, ce qui suit fonctionne pour moi🎜
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
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal