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

Décomposer XML avec des balises inconnues dans Golang ?

WBOY
WBOYavant
2024-02-08 22:45:091144parcourir

在 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>`

Mon intention réelle - insérer une balise avant la balise de fermeture 2706a1e7c77ff18e07182931ad8578f7 2706a1e7c77ff18e07182931ad8578f7 标签之前插入一个标签

解决方法

根据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
}

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