Heim >Backend-Entwicklung >Golang >XML mit einigen unbekannten Tags in Golang entmarshaling?

XML mit einigen unbekannten Tags in Golang entmarshaling?

WBOY
WBOYnach vorne
2024-02-08 22:45:091198Durchsuche

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

In Golang müssen wir häufig XML-Daten verarbeiten. Manchmal stoßen wir jedoch auf unbekannte Tags, was das Unmarshaling von XML-Daten erschwert. Wie geht man also mit diesen unbekannten Tags in Golang um? In diesem Artikel stellt der PHP-Editor Xinyi einige Methoden zum Umgang mit unbekannten Tags in Golang vor, um Ihnen beim besseren Unmarshing von XML-Daten zu helfen. Egal, ob Sie ein Neuling oder ein erfahrener Entwickler sind, dieser Artikel kann Ihnen nützliche Tipps und Anleitungen geben. Lasst uns beginnen!

Frageninhalt

Wie soll ich bei einer XML-Rohzeichenfolge mit unbekannter Struktur (aus dem OCR-Ergebnis) die Zeichenfolge in eine verarbeitbare Go-Struktur/Schnittstelle auspacken?

Mit JSON kann ich so etwas machen. Gibt es also eine XML-Version der Antwort?

Beispiel

randomOcrXmlString := `
<container>
<x></x>
<y><z></z><y>
<abc></abc>
... (many more random tags)
</container>`

Meine eigentliche Absicht – ein Tag vor dem schließenden 2706a1e7c77ff18e07182931ad8578f7-Tag einfügen 2706a1e7c77ff18e07182931ad8578f7 标签之前插入一个标签

解决方法

根据encoding/xmlWorkaround

Laut encoding/xml Dokumentation

, 🎜 🎜Das Folgende funktioniert also für mich🎜
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
}

Das obige ist der detaillierte Inhalt vonXML mit einigen unbekannten Tags in Golang entmarshaling?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen