Rumah >pembangunan bahagian belakang >Golang >Membongkar XML dengan beberapa tag yang tidak diketahui dalam golang?

Membongkar XML dengan beberapa tag yang tidak diketahui dalam golang?

WBOY
WBOYke hadapan
2024-02-08 22:45:091199semak imbas

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

Di golang, kita selalunya perlu memproses data XML. Walau bagaimanapun, kadangkala kami mungkin menghadapi beberapa teg yang tidak diketahui, yang membawa beberapa kesukaran untuk membongkar data XML. Jadi, bagaimana untuk menangani tag yang tidak diketahui ini di golang? Dalam artikel ini, editor PHP Xinyi akan memperkenalkan beberapa kaedah pengendalian tag yang tidak diketahui dalam golang untuk membantu anda menyahmarshal data XML dengan lebih baik. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini boleh memberi anda petua dan panduan yang berguna. Mari mulakan!

Kandungan soalan

Memandangkan rentetan mentah XML struktur yang tidak diketahui (dari hasil OCR), bagaimanakah saya harus menyahmarshal rentetan itu ke dalam struktur/antara muka go yang boleh diproses?

Dengan JSON saya boleh melakukan sesuatu seperti ini, jadi adakah terdapat versi XML jawapannya?

Contoh

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

Niat sebenar saya - masukkan teg sebelum teg 2706a1e7c77ff18e07182931ad8578f7 penutup 2706a1e7c77ff18e07182931ad8578f7 标签之前插入一个标签

解决方法

根据encoding/xmlPenyelesaian

Menurut pengekodan/xml dokumentasi

, 🎜 🎜Jadi yang berikut berfungsi untuk saya🎜
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
}

Atas ialah kandungan terperinci Membongkar XML dengan beberapa tag yang tidak diketahui dalam golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Lumpuhkan RYUK (Bekas ujian Go)Artikel seterusnya:Lumpuhkan RYUK (Bekas ujian Go)