package payment import ( "bytes" "encoding/xml" "io" "sort" "strings" ) type testXMLValue struct { XMLName xml.Name Value string `xml:",chardata"` } func testXMLValues(raw []byte) (map[string]string, error) { decoder := xml.NewDecoder(bytes.NewReader(raw)) result := map[string]string{} for { token, err := decoder.Token() if err == io.EOF { return result, nil } if err != nil { return nil, err } start, ok := token.(xml.StartElement) if !ok || start.Name.Local == "xml" { continue } var value testXMLValue if err = decoder.DecodeElement(&value, &start); err != nil { return nil, err } if value.Value != "" { result[start.Name.Local] = value.Value } } } func testXMLEncode(values map[string]string) []byte { var b strings.Builder b.WriteString("") keys := make([]string, 0, len(values)) for key := range values { keys = append(keys, key) } sort.Strings(keys) for _, key := range keys { b.WriteString("<") b.WriteString(key) b.WriteString(">") } b.WriteString("") return []byte(b.String()) }