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!
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 </container>
penutup </container>
标签之前插入一个标签
根据encoding/xml
Penyelesaian
Menurut pengekodan/xml
dokumentasi
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!